[hibernate-issues] [Hibernate-JIRA] Created: (HHH-2307) Optimize select new query calls like "select new Holder(entity, entity.something) ..." so the parser does not treat them as shallow

Matt Wheeler (JIRA) noreply at atlassian.com
Wed Dec 13 12:16:06 EST 2006


Optimize select new query calls like "select new Holder(entity, entity.something) ..." so the parser does not treat them as shallow
-----------------------------------------------------------------------------------------------------------------------------------

         Key: HHH-2307
         URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2307
     Project: Hibernate3
        Type: New Feature

  Components: query-hql  
    Versions: 3.2.0.ga    
 Environment: Hibernate Version: 3.2.0ga
Database platform: Oracle 9.2, HSQLDB 1.7.3.3, and  Derby 10.2.1.6 
    Reporter: Matt Wheeler
    Priority: Minor


Using the JPA implementation, and the following named query:

@NamedQuery(name=Country.COUNTRIES_AS_SELECT_ITEMS,
query="select new javax.faces.model.SelectItem(c, c.name) from Country c")

Which is called from the following method:

public List<SelectItem> getAllCountriesAsSelectItems() {
return entityManager.createNamedQuery(Country.COUNTRIES_AS_SELECT_ITEMS).getResultList();
}

the following SQL is generated:

Hibernate: select country0_.id as col_0_0_, country0_.name as col_1_0_ from Country country0_

Hibernate: select country0_.id as id3_0_, country0_.name as name3_0_ from Country country0_ where country0_.id=?
Hibernate: select country0_.id as id3_0_, country0_.name as name3_0_ from Country country0_ where country0_.id=?
Hibernate: select country0_.id as id3_0_, country0_.name as name3_0_ from Country country0_ where country0_.id=?
Hibernate: select country0_.id as id3_0_, country0_.name as name3_0_ from Country country0_ where country0_.id=?
Hibernate: select country0_.id as id3_0_, country0_.name as name3_0_ from Country country0_ where country0_.id=?

Assuming that we have 5 countries in the database, calling the method above would result in 6 queries.  The first query appears to get all of the ids, and the next 5 queries appear to retrieve the objects by id.

However, if we change the query to:
"select new javax.faces.model.SelectItem(c.name) from Country c" and only select an attribute of country, instead of an attribute of the country and the country entity as well, it will only issue 1 query

I was just wondering if this could be optimized so that there are not n+1 queries in the new Holder(entity, enity.a) instance

Just for reference: As per issue HHH-544 Select new n+1 queries, Gavin responded that the parser treats all select new calls as shallow, as is manifest in the above example. 

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