[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