[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6042) To much columns in select queries after creating criteria with join

Miguel Diaz (JIRA) noreply at atlassian.com
Tue Apr 5 05:39:09 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=41966#action_41966 ] 

Miguel Diaz commented on HHH-6042:
----------------------------------

I only want to note that this is really an issue and it can't be achieved by using proyections as suggested in the closing comment of the duplicated issue [http://opensource.atlassian.com/projects/hibernate/browse/HHH-2150] since the projections workaround returns unproxied objects. The request is to make a Criteria equivalent of the following HQL: "select e from Events e join e.participants p where p.age = 41".

> To much columns in select queries after creating criteria with join
> -------------------------------------------------------------------
>
>                 Key: HHH-6042
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6042
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.2.6
>         Environment: <dependency>
>    <groupId>org.hibernate</groupId>
>    <artifactId>hibernate</artifactId>
>    <version>3.2.6.ga</version>
> </dependency>
> Any database
>            Reporter: Karol Kowalczyk
>         Attachments: AbstractEntityJoinWalker.java, Loader.java
>
>
> When I create criteria for any class with any value of property of association f.e.:
> java code:
>     eventDCriteria = DetachedCriteria.forClass(Event.class);
>     personDCriteria = eventDCriteria.createCriteria("participants");
>     personDCriteria.add(Expression.eq("age", 41));
>     List<Event> events=(List<Event>)getHibernateTemplate().findByCriteria(eventDCriteria, 0, 2);
> class mappings:
>     <class name="Event" table="EVENTS">
>         <id name="id" column="EVENT_ID">
>             <generator class="native"/>
>         </id>
>         <property name="date" type="timestamp" column="EVENT_DATE"/>
>         <property name="title"/>
>         <set name="participants" table="PERSON_EVENT" inverse="true">
>             <key column="EVENT_ID"/>
>             <many-to-many column="PERSON_ID" class="Person"/>
>         </set>
>     </class>
>     <class name="Person" table="PERSON">
>         <id name="id" column="PERSON_ID">
>             <generator class="native"/>
>         </id>
>         <property name="age"/>
>         <property name="firstname"/>
>         <property name="lastname"/>
>         <set name="events" table="PERSON_EVENT" >
>             <key column="PERSON_ID"/>
>             <many-to-many column="EVENT_ID" class="Event"/>
>         </set>
>         
>         <set name="emailAddresses" table="PERSON_EMAIL_ADDR" >
>             <key column="PERSON_ID"/>
>             <element type="string" column="EMAIL_ADDR"/>
>         </set>
>     </class>
> a Hibernate still creates select query f.e.:
> select e.EVENT_ID, e.EVENT_DATE, e.title, pe.EVENT_ID, pe.PERSON_ID, p.PERSON_ID, p.age, p.firstname, ...
>   from EVENTS e
>   inner join PERSON_EVENT pe on pe.EVENT_ID=e.EVENT_ID
>   inner join PERSON p on p.PERSON_ID=pe.PERSON_ID
>   where p.age=?;
> Why this hibernates query have UNNECESSARY list of columns: pe.EVENT_ID, pe.PERSON_ID, p.PERSON_ID, p.age, p.firstname, ...?
> This query is not INDEXONLY for any databases.
> More EFFECTIVE query is:
> select e.EVENT_ID, e.EVENT_DATE, e.title
>   from EVENTS e
>   inner join PERSON_EVENT pe on pe.EVENT_ID=e.EVENT_ID
>   inner join PERSON p on p.PERSON_ID=pe.PERSON_ID
>   where p.age=?;
> A prepared only for my two changes in hibernate: Loader.java and AbstractEntityJoinWalker.java to get more effective selects.

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