[jboss-cvs] jboss-seam/src/main/org/jboss/seam/framework ...
Gavin King
gavin.king at jboss.com
Thu Dec 14 03:37:50 EST 2006
User: gavin
Date: 06/12/14 03:37:50
Modified: src/main/org/jboss/seam/framework EntityQuery.java
HibernateEntityQuery.java Query.java
Log:
fix JBSEAM-591
Revision Changes Path
1.6 +14 -11 jboss-seam/src/main/org/jboss/seam/framework/EntityQuery.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityQuery.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/EntityQuery.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- EntityQuery.java 25 Oct 2006 15:14:35 -0000 1.5
+++ EntityQuery.java 14 Dec 2006 08:37:49 -0000 1.6
@@ -7,7 +7,6 @@
import org.jboss.seam.Component;
import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.core.Expressions.ValueBinding;
public class EntityQuery extends Query
{
@@ -32,7 +31,7 @@
@Override
public List getResultList()
{
- if (resultList==null)
+ if (resultList==null || isAnyParameterDirty())
{
javax.persistence.Query query = createQuery();
resultList = query==null ? null : query.getResultList();
@@ -44,7 +43,7 @@
@Override
public Object getSingleResult()
{
- if (singleResult==null)
+ if (singleResult==null || isAnyParameterDirty())
{
javax.persistence.Query query = createQuery();
singleResult = query==null ?
@@ -57,7 +56,7 @@
@Override
public Long getResultCount()
{
- if (resultCount==null)
+ if (resultCount==null || isAnyParameterDirty())
{
javax.persistence.Query query = createCountQuery();
resultCount = query==null ?
@@ -93,10 +92,12 @@
{
parseEjbql();
+ evaluateAllParameters();
+
getEntityManager().joinTransaction();
javax.persistence.Query query = getEntityManager().createQuery( getRenderedEjbql() );
- setParameters( query, getQueryParameters(), 0 );
- setParameters( query, getRestrictionParameters(), getQueryParameters().size() );
+ setParameters( query, getQueryParameterValues(), 0 );
+ setParameters( query, getRestrictionParameterValues(), getQueryParameterValues().size() );
if ( getFirstResult()!=null) query.setFirstResult( getFirstResult() );
if ( getMaxResults()!=null) query.setMaxResults( getMaxResults() );
if ( getHints()!=null )
@@ -113,18 +114,20 @@
{
parseEjbql();
+ evaluateAllParameters();
+
getEntityManager().joinTransaction();
javax.persistence.Query query = getEntityManager().createQuery( getCountEjbql() );
- setParameters( query, getQueryParameters(), 0 );
- setParameters( query, getRestrictionParameters(), getQueryParameters().size() );
+ setParameters( query, getQueryParameterValues(), 0 );
+ setParameters( query, getRestrictionParameterValues(), getQueryParameterValues().size() );
return query;
}
- private void setParameters(javax.persistence.Query query, List<ValueBinding> parameters, int start)
+ private void setParameters(javax.persistence.Query query, List<Object> parameters, int start)
{
for (int i=0; i<parameters.size(); i++)
{
- Object parameterValue = parameters.get(i).getValue();
+ Object parameterValue = parameters.get(i);
if (parameterValue!=null)
{
query.setParameter( "p" + (start + i), parameterValue );
1.5 +13 -10 jboss-seam/src/main/org/jboss/seam/framework/HibernateEntityQuery.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: HibernateEntityQuery.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/HibernateEntityQuery.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- HibernateEntityQuery.java 15 Oct 2006 21:54:49 -0000 1.4
+++ HibernateEntityQuery.java 14 Dec 2006 08:37:49 -0000 1.5
@@ -5,7 +5,6 @@
import org.hibernate.Session;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.core.Expressions.ValueBinding;
public class HibernateEntityQuery extends Query
{
@@ -33,7 +32,7 @@
@Override
public List getResultList()
{
- if (resultList==null)
+ if (resultList==null || isAnyParameterDirty())
{
org.hibernate.Query query = createQuery();
resultList = query==null ? null : query.list();
@@ -45,7 +44,7 @@
@Override
public Object getSingleResult()
{
- if (singleResult==null)
+ if (singleResult==null || isAnyParameterDirty())
{
org.hibernate.Query query = createQuery();
singleResult = query==null ?
@@ -58,7 +57,7 @@
@Override
public Long getResultCount()
{
- if (resultCount==null)
+ if (resultCount==null || isAnyParameterDirty())
{
org.hibernate.Query query = createCountQuery();
resultCount = query==null ?
@@ -94,9 +93,11 @@
{
parseEjbql();
+ evaluateAllParameters();
+
org.hibernate.Query query = getSession().createQuery( getRenderedEjbql() );
- setParameters( query, getQueryParameters(), 0 );
- setParameters( query, getRestrictionParameters(), getQueryParameters().size() );
+ setParameters( query, getQueryParameterValues(), 0 );
+ setParameters( query, getRestrictionParameterValues(), getQueryParameterValues().size() );
if ( getFirstResult()!=null) query.setFirstResult( getFirstResult() );
if ( getMaxResults()!=null) query.setMaxResults( getMaxResults() );
if ( getCacheable()!=null ) query.setCacheable( getCacheable() );
@@ -109,17 +110,19 @@
{
parseEjbql();
+ evaluateAllParameters();
+
org.hibernate.Query query = getSession().createQuery( getCountEjbql() );
- setParameters( query, getQueryParameters(), 0 );
- setParameters( query, getRestrictionParameters(), getQueryParameters().size() );
+ setParameters( query, getQueryParameterValues(), 0 );
+ setParameters( query, getRestrictionParameterValues(), getQueryParameterValues().size() );
return query;
}
- private void setParameters(org.hibernate.Query query, List<ValueBinding> parameters, int start)
+ private void setParameters(org.hibernate.Query query, List<Object> parameters, int start)
{
for (int i=0; i<parameters.size(); i++)
{
- Object parameterValue = parameters.get(i).getValue();
+ Object parameterValue = parameters.get(i);
if (parameterValue!=null)
{
query.setParameter( "p" + (start + i), parameterValue );
1.13 +60 -0 jboss-seam/src/main/org/jboss/seam/framework/Query.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Query.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/Query.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- Query.java 10 Dec 2006 15:54:24 -0000 1.12
+++ Query.java 14 Dec 2006 08:37:49 -0000 1.13
@@ -27,6 +27,9 @@
private List<String> parsedRestrictions;
private List<ValueBinding> restrictionParameters;
+ private List<Object> queryParameterValues;
+ private List<Object> restrictionParameterValues;
+
public abstract List getResultList();
public abstract Object getSingleResult();
public abstract Long getResultCount();
@@ -276,4 +279,61 @@
return restrictionParameters;
}
+ private static boolean isAnyParameterDirty(List<ValueBinding> valueBindings, List<Object> lastParameterValues)
+ {
+ if (lastParameterValues==null) return true;
+ for (int i=0; i<valueBindings.size(); i++)
+ {
+ Object parameterValue = valueBindings.get(i).getValue();
+ Object lastParameterValue = lastParameterValues.get(i);
+ if ( parameterValue!=lastParameterValue && ( parameterValue==null || !parameterValue.equals(lastParameterValue) ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static List<Object> getParameterValues(List<ValueBinding> valueBindings)
+ {
+ List<Object> values = new ArrayList<Object>( valueBindings.size() );
+ for (int i=0; i<valueBindings.size(); i++)
+ {
+ values.add( valueBindings.get(i).getValue() );
+ }
+ return values;
+ }
+
+ protected void evaluateAllParameters()
+ {
+ setQueryParameterValues( getParameterValues( getQueryParameters() ) );
+ setRestrictionParameterValues( getParameterValues( getRestrictionParameters() ) );
+ }
+
+ protected boolean isAnyParameterDirty()
+ {
+ return isAnyParameterDirty( getQueryParameters(), getQueryParameterValues() )
+ || isAnyParameterDirty( getRestrictionParameters(), getRestrictionParameterValues() );
+ }
+
+ protected List<Object> getQueryParameterValues()
+ {
+ return queryParameterValues;
+ }
+
+ protected void setQueryParameterValues(List<Object> queryParameterValues)
+ {
+ this.queryParameterValues = queryParameterValues;
+ }
+
+ protected List<Object> getRestrictionParameterValues()
+ {
+ return restrictionParameterValues;
+ }
+
+ protected void setRestrictionParameterValues(List<Object> restrictionParameterValues)
+ {
+ this.restrictionParameterValues = restrictionParameterValues;
+ }
+
}
More information about the jboss-cvs-commits
mailing list