From: <fab...@us...> - 2011-03-22 20:33:22
|
Revision: 5505 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5505&view=rev Author: fabiomaulo Date: 2011-03-22 20:33:16 +0000 (Tue, 22 Mar 2011) Log Message: ----------- Fix NH-2491 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/NH2491/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2011-03-22 18:53:44 UTC (rev 5504) +++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2011-03-22 20:33:16 UTC (rev 5505) @@ -1821,9 +1821,11 @@ { int propertyIndex = Array.IndexOf(SubclassColumnClosure, column); - if (propertyIndex < 0) + // The check for KeyColumnNames was added to fix NH-2491 + if (propertyIndex < 0 || Array.IndexOf(KeyColumnNames, column) >= 0) + { return rootAlias; - + } return GenerateTableAlias(rootAlias, SubclassColumnTableNumberClosure[propertyIndex]); } Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Fixture.cs 2011-03-22 20:33:16 UTC (rev 5505) @@ -0,0 +1,64 @@ +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2491 +{ + public class BaseClass + { + public virtual int Id { get; set; } + + public virtual BaseClass Another { get; set; } + } + + public class SubClass : BaseClass + { + } + + public class ReferencingClass + { + public virtual int Id { get; set; } + + public virtual SubClass SubClass { get; set; } + } + + + public class Fixture : BugTestCase + { + [Test] + public void InheritanceSameColumnName() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var subClass = new SubClass(); + var referencing = new ReferencingClass() { SubClass = subClass }; + session.Save(subClass); + session.Save(referencing); + + session.Transaction.Commit(); + } + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var referencing = session.CreateQuery("from ReferencingClass") + .UniqueResult<ReferencingClass>(); + + // accessing a property of the base class to activate lazy loading + // this line crashes because it tries to find the base class by + // the wrong column name. + BaseClass another; + Executing.This(() => another = referencing.SubClass.Another).Should().NotThrow(); + + session.Transaction.Commit(); + } + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + session.CreateQuery("delete from ReferencingClass").ExecuteUpdate(); + session.CreateQuery("delete from BaseClass").ExecuteUpdate(); + session.Transaction.Commit(); + } + + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2491/Mappings.hbm.xml 2011-03-22 20:33:16 UTC (rev 5505) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH2491" + assembly="NHibernate.Test"> + + <class name="BaseClass" > + <id name="Id"> + <generator class="hilo" /> + </id> + + <many-to-one name="Another" column="BaseClass_FK" /> + + <joined-subclass name="SubClass" > + <!-- use a column name already used in the base class--> + <key column="BaseClass_FK"/> + </joined-subclass> + </class> + + <class name="ReferencingClass" > + <id name="Id"> + <generator class="hilo" /> + </id> + <many-to-one name="SubClass" column="SubClass_FK" /> + </class> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-22 18:53:44 UTC (rev 5504) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-22 20:33:16 UTC (rev 5505) @@ -648,6 +648,7 @@ <Compile Include="NHSpecificTest\NH2470\DTO.cs" /> <Compile Include="NHSpecificTest\NH2484\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2484\Model.cs" /> + <Compile Include="NHSpecificTest\NH2491\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2507\Animal.cs" /> <Compile Include="NHSpecificTest\NH2507\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2530\Domain.cs" /> @@ -2476,6 +2477,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2491\Mappings.hbm.xml" /> <EmbeddedResource Include="Insertordering\Mapping.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2530\Mappings.hbm.xml" /> <EmbeddedResource Include="DynamicProxyTests\InterfaceProxySerializationTests\ProxyImpl.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |