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

Karol Kowalczyk (JIRA) noreply at atlassian.com
Mon Feb 13 09:24:12 EST 2012


     [ https://hibernate.onjira.com/browse/HHH-6042?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Karol Kowalczyk updated HHH-6042:
---------------------------------

    Attachment: KosztRealizacjiZapytaniaWHibernate.doc

Costs and plans for queries in hibernate by db2 explain

> To much columns in select queries after creating criteria with join
> -------------------------------------------------------------------
>
>                 Key: HHH-6042
>                 URL: https://hibernate.onjira.com/browse/HHH-6042
>             Project: Hibernate ORM
>          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, KosztRealizacjiZapytaniaWHibernate.doc, 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.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list