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. |