|
From: <fab...@us...> - 2010-12-18 22:29:13
|
Revision: 5329
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5329&view=rev
Author: fabiomaulo
Date: 2010-12-18 22:29:06 +0000 (Sat, 18 Dec 2010)
Log Message:
-----------
Fix NH-2037 (by Jose F. Romaniello)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Domain.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Mappings.hbm.xml
Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-12-18 16:26:47 UTC (rev 5328)
+++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-12-18 22:29:06 UTC (rev 5329)
@@ -4066,6 +4066,10 @@
{
snapshot[i] =
extractionTypes[i].Hydrate(rs, GetPropertyAliases(string.Empty, naturalIdPropertyIndexes[i]), session, null);
+ if (extractionTypes[i].IsEntityType)
+ {
+ snapshot[i] = extractionTypes[i].ResolveIdentifier(snapshot[i], session, null);
+ }
}
return snapshot;
}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Domain.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Domain.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Domain.cs 2010-12-18 22:29:06 UTC (rev 5329)
@@ -0,0 +1,36 @@
+namespace NHibernate.Test.NHSpecificTest.NH2037
+{
+ public class Country
+ {
+ public virtual int Id { get; set; }
+ public virtual string Name { get; set; }
+
+ public virtual bool Equals(Country other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return other.Id == Id;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (!(obj is Country)) return false;
+ return Equals((Country) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return Id;
+ }
+ }
+
+ public class City
+ {
+ public virtual int Id { get; set; }
+ public virtual Country Country { get; set; }
+ public virtual int CityCode { get; set; }
+ public virtual string Name { get; set; }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Fixture.cs 2010-12-18 22:29:06 UTC (rev 5329)
@@ -0,0 +1,56 @@
+ using NUnit.Framework;
+namespace NHibernate.Test.NHSpecificTest.NH2037
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ [Test]
+ public void Test()
+ {
+ var country = new Country {Name = "Argentina"};
+
+ var city = new City
+ {
+ CityCode = 5,
+ Country = country,
+ Name = "Cordoba"
+ };
+
+
+ using (ISession session = OpenSession())
+ using(var tx = session.BeginTransaction())
+ {
+ session.Save(city.Country);
+ session.Save(city);
+ tx.Commit();
+ }
+
+ using(ISession session = OpenSession())
+ using (var tx = session.BeginTransaction())
+ {
+ //THROW
+ session.SaveOrUpdate(city);
+ tx.Commit();
+ }
+
+ using (var session = OpenSession())
+ using (var tx = session.BeginTransaction())
+ {
+ Assert.IsNotNull(session.Get<City>(city.Id));
+ tx.Commit();
+ }
+ }
+
+ protected override void OnTearDown()
+ {
+ using(var session = OpenSession())
+ using(var tx = session.BeginTransaction())
+ {
+ session.Delete("from City");
+ session.Delete("from Country");
+ tx.Commit();
+ }
+ }
+
+ }
+ }
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2037/Mappings.hbm.xml 2010-12-18 22:29:06 UTC (rev 5329)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH2037">
+
+ <class name="Country" table="Countries">
+ <id name="Id">
+ <generator class="identity"/>
+ </id>
+ <property name="Name" />
+ </class>
+
+ <class name="City" table="Cities">
+ <id name="Id">
+ <generator class="identity"/>
+ </id>
+ <natural-id>
+ <many-to-one name="Country" class="Country" />
+ <property name="CityCode" />
+
+ </natural-id>
+ <property name="Name" />
+ </class>
+
+</hibernate-mapping>
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-18 16:26:47 UTC (rev 5328)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-18 22:29:06 UTC (rev 5329)
@@ -476,6 +476,8 @@
<Compile Include="NHSpecificTest\NH1836\Fixture.cs" />
<Compile Include="NHSpecificTest\NH1869\Entities.cs" />
<Compile Include="NHSpecificTest\NH1869\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2037\Domain.cs" />
+ <Compile Include="NHSpecificTest\NH2037\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2111\A.cs" />
<Compile Include="NHSpecificTest\NH2111\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2112\Fixture.cs" />
@@ -2358,6 +2360,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2037\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2118\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2362\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2244\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|