[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-2381) EntityQuery to stop fetching maxResults + 1 rows
Brian Kalbfus (JIRA)
jira-events at lists.jboss.org
Thu Dec 13 23:51:51 EST 2007
EntityQuery to stop fetching maxResults + 1 rows
------------------------------------------------
Key: JBSEAM-2381
URL: http://jira.jboss.com/jira/browse/JBSEAM-2381
Project: JBoss Seam
Issue Type: Feature Request
Components: EJB3
Affects Versions: 2.0.1.CR1, 2.0.0.GA
Reporter: Brian Kalbfus
In using a hibernate interceptor to audit instantiating entities, I noticed one extra record in excess of getMaxResults() is instantiated that isn't used - thus rendering a false audit. This was because of the following code in EntityQuery (copied from CVS head):
<code>
protected javax.persistence.Query createQuery()
{
parseEjbql();
evaluateAllParameters();
joinTransaction();
javax.persistence.Query query = getEntityManager().createQuery( getRenderedEjbql() );
setParameters( query, getQueryParameterValues(), 0 );
setParameters( query, getRestrictionParameterValues(), getQueryParameterValues().size() );
if ( getFirstResult()!=null) query.setFirstResult( getFirstResult() );
if ( getMaxResults()!=null) query.setMaxResults( getMaxResults()+1 ); //add one, so we can tell if there is another page
if ( getHints()!=null )
{
for ( Map.Entry<String, String> me: getHints().entrySet() )
{
query.setHint(me.getKey(), me.getValue());
}
}
return query;
}
</code>
Specifically:
if ( getMaxResults()!=null) query.setMaxResults( getMaxResults()+1 ); //add one, so we can tell if there is another page
The code says it is adding one so that it knows if there is another page. I see its use here:
<code>
public boolean isNextExists()
{
return resultList!=null &&
resultList.size() > getMaxResults();
}
</code>
I propose this for isNextExists():
<code>
public boolean isNextExists()
{
return getResultCount() > (getFirstResult()!=null?getFirstResult():0) + getMaxResults();
}
</code>
Then we can change that line in createQuery() to:
if ( getMaxResults()!=null) query.setMaxResults( getMaxResults() );
I did this in my subclass by overriding these two methods for my project; I had to copy in some of the private members of EntityQuery to do this.
Thanks,
Brian Kalbfus
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list