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