]
Pete Muir updated JBSEAM-2381:
------------------------------
Fix Version/s: 2.1.0.GA
(was: 2.0.2.GA)
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: Framework
Affects Versions: 2.0.1.CR1, 2.0.0.GA
Reporter: Brian Kalbfus
Fix For: 2.1.0.GA
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: