[hibernate-issues] [Hibernate-JIRA] Closed: (HHH-2529) HQL resulting in incorrect SQL caused by ORDER BY

Steve Ebersole (JIRA) noreply at atlassian.com
Thu Mar 29 15:13:04 EDT 2007


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steve Ebersole closed HHH-2529.
-------------------------------

    Resolution: Rejected

Actually a couple of things wrong here:
1) your "dereference" of the collection property here is illegal syntax.  Somehow a regression was introduced which allowed this to happen.  I have added the checks and proper exceptions again, along with more unit tests; see the documentation for how to properly dereference a collection.
2) If you want distinct results, specify distinct on your select clause.  Again, a documentation item.

> HQL resulting in incorrect SQL caused by ORDER BY
> -------------------------------------------------
>
>                 Key: HHH-2529
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2529
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: query-hql
>    Affects Versions: 3.2.2
>         Environment: hibernate-3.2.2, Sybase Adaptive Server 12.5
>            Reporter: Marc Luce
>            Priority: Minor
>         Attachments: SimpleHibernateTest.zip
>
>
> I have written a HQL query that retrieves a set of objects that are mapped from a parent object. The SQL that is generated from it is incorrect. I have discovered that the ORDER BY clause is causing the problem. I will include the HQL that generates the incorrect join in SQL and the HQL that generates the correct join in SQL (without an ORDER BY). The first query results in a query that returns each object 3 times.  If I remove the ORDER BY clause, I will receive the correct result set, but obviously, it would be unordered.
> The HQL:
> SELECT b.loans FROM Batch AS b WHERE b.id = :id ORDER BY b.loans.loanNumber DESC
> The SQL that is generated:
>     select
>         loan2_.id as id2_,
>         loan2_.name as name2_ 
>     from
>         dbo.TestBatch batch0_ 
>     inner join
>         TestMapping loans1_ 
>             on batch0_.id=loans1_.batchId 
>     inner join
>         dbo.TestLoan loan2_ 
>             on loans1_.loanId=loan2_.id,
>         TestMapping loans3_,
>         dbo.TestLoan loan4_ 
>     where
>         batch0_.id=loans3_.batchId 
>         and loans3_.loanId=loan4_.id 
>         and batch0_.id=? 
>     order by
>         loan4_.name DESC
> The mapping:
>     <class name="testHibernate.Batch"
>            table="TestBatch"
>            schema="dbo"
>            dynamic-insert="true"
>            dynamic-update="true">
>            
>         <id name="id" type="java.lang.Integer" column="id" >
>             <generator class="increment" />
>         </id>
>         <property name="name" type="java.lang.String" column="name" length="80" not-null="true" />
>        
>         <set name="loans" table="TestMapping">
>             <key column="batchId"/>
>             <many-to-many column="loanId" unique="true" class="testHibernate.Loan" lazy="proxy"/>
>         </set>
>     </class>
>     <class name="testHibernate.Loan"
>            table="TestLoan"
>            schema="dbo"
>            dynamic-insert="true"
>            dynamic-update="true">
>            
>         <id name="id" type="java.lang.Integer" column="id" >
>             <generator class="increment" />
>         </id>
>         <property name="loanNumber" type="java.lang.String" column="name" length="80" not-null="true" />
>     </class> 
> I will also attach a zip of my very simple eclipse project that illustrates the problem.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list