From: Mariusz F. (JIRA) <nh...@gm...> - 2011-04-26 17:37:56
|
CreateSQLQuery (used with AddEntity, AddJoin) resutls with cartesian product (not distincted entities) ------------------------------------------------------------------------------------------------------ Key: NH-2677 URL: http://216.121.112.228/browse/NH-2677 Project: NHibernate Issue Type: Bug Components: Core Affects Versions: 3.1.0 Reporter: Mariusz Florek To get test case for this issue add another employment entity in [Test] public void SQLQueryInterface() method: Employment emp1 = new Employment(gavin, jboss, "AU1"); s.Save(emp1); in a file: NHibernate-3.1.0.GA-src\src\NHibernate.Test\SqlTest\Query\NativeSQLQueriesFixture.cs (I used NHibernate 3.1.0.GA source code) Following code will result distincted Employment entities instead of expected Organization ones (I've tested it also in other structures - with similar results): s = OpenSession(); t = s.BeginTransaction(); l = s.CreateSQLQuery("select {org.*}, {emp.*} " + "from ORGANIZATION org " + " left outer join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER") .AddEntity("org", typeof(Organization)) .AddJoin("emp", "org.employments") .SetResultTransformer(new DistinctRootEntityResultTransformer()) .List(); t.Commit(); s.Close(); Look at: public object TransformTuple(object[] tuple, string[] aliases) method in class: DistinctRootEntityResultTransformer implementation - when changed to: return tuple[0]; - works properly (this is hint - not solution). Cheers, Mariusz BTW - is it possible to get partial data from native sql transformed to entities f.e.: select a.Name, b.Category from Table1 a, Table2 b where a.table1_id = b.table1_id that will result as IList<Table1> (not a.*, b.*)? - link to example is welcome ;) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |