[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