From: <fab...@us...> - 2011-04-23 20:05:09
|
Revision: 5752 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5752&view=rev Author: fabiomaulo Date: 2011-04-23 20:05:03 +0000 (Sat, 23 Apr 2011) Log Message: ----------- Fix NH-1747 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs trunk/nhibernate/src/NHibernate.DomainModel/Multi.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs 2011-04-23 18:51:34 UTC (rev 5751) +++ trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs 2011-04-23 20:05:03 UTC (rev 5752) @@ -43,11 +43,11 @@ InitStatementString(elementPersister, alias, batchSize, subquery); } - // NH-1747 FIX - //protected override string GenerateAliasForColumn(string rootAlias, string column) - //{ - // return elementPersister.GenerateTableAliasForColumn(rootAlias, column); - //} + protected override string GenerateAliasForColumn(string rootAlias, string column) + { + // NH-1747 FIX (see OneToManyPersister) + return elementPersister.GenerateTableAliasForColumn(rootAlias, column); + } private void InitStatementString(IOuterJoinLoadable elementPersister, string alias, int batchSize, SqlString subquery) { Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs 2011-04-23 18:51:34 UTC (rev 5751) +++ trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs 2011-04-23 20:05:03 UTC (rev 5752) @@ -321,21 +321,27 @@ .ToString(); } - // NH-1747 FIX - //protected override SelectFragment GenerateSelectFragment(string alias, string columnSuffix) - //{ - // var ojl = (IOuterJoinLoadable)ElementPersister; - // var selectFragment = new SelectFragment(Dialect).SetSuffix(columnSuffix); - // var columnNames = KeyColumnNames; - // var columnAliases = KeyColumnAliases; - // for (int i = 0; i < columnNames.Length; i++) - // { - // var column = columnNames[i]; - // var tableAlias = ojl.GenerateTableAliasForColumn(alias, column); - // selectFragment.AddColumn(tableAlias, column, columnAliases[i]); - // } - // return selectFragment; - //} + protected override SelectFragment GenerateSelectFragment(string alias, string columnSuffix) + { + /* + NH-1747 FIX + Note: the fix for NH-1747 may cause some problem when the same ColumnName is used to represent two different properties in the same hierarchy + In all our test it happened only for NHibernate.Test.Legacy.MultiTableTest.MultiTableCollections + The mapping Multi.hbm.xml had a column named "parent" to represent the Key of a set for the relation Lower->Top and SubMulti->SubMulti everything in the same hierarchy + NH TODO: Have to add an early check of same ColumnName used to represent two relations. + */ + var ojl = (IOuterJoinLoadable)ElementPersister; + var selectFragment = new SelectFragment(Dialect).SetSuffix(columnSuffix); + var columnNames = KeyColumnNames; + var columnAliases = KeyColumnAliases; + for (int i = 0; i < columnNames.Length; i++) + { + var column = columnNames[i]; + var tableAlias = ojl.GenerateTableAliasForColumn(alias, column); + selectFragment.AddColumn(tableAlias, column, columnAliases[i]); + } + return selectFragment; + } /// <summary> /// Create the <see cref="OneToManyLoader" /> Modified: trunk/nhibernate/src/NHibernate.DomainModel/Multi.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.DomainModel/Multi.hbm.xml 2011-04-23 18:51:34 UTC (rev 5751) +++ trunk/nhibernate/src/NHibernate.DomainModel/Multi.hbm.xml 2011-04-23 20:05:03 UTC (rev 5752) @@ -62,10 +62,10 @@ <key column="sid"/> <property name="Amount" column="dupe"/> <bag name="Children" lazy="true" inverse="true" > - <key column="parent"/> + <key column="parentId"/> <one-to-many class="NHibernate.DomainModel.SubMulti, NHibernate.DomainModel"/> </bag> - <many-to-one name="Parent" column="parent" /> + <many-to-one name="Parent" column="parentId" /> <list name="MoreChildren" lazy="true"> <key column="another_parent"/> <index column="list_ind"/> Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs 2011-04-23 18:51:34 UTC (rev 5751) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs 2011-04-23 20:05:03 UTC (rev 5752) @@ -43,7 +43,7 @@ } } - [Test, Ignore("The fix was commented in the code. Look for NH-1747")] + [Test] public void TraversingBagToJoinChildElementShouldWork() { using (ISession session = OpenSession()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |