You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/11/12 22:31:31 UTC

svn commit: r835563 - in /openjpa/branches/1.3.x: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java

Author: faywang
Date: Thu Nov 12 21:31:31 2009
New Revision: 835563

URL: http://svn.apache.org/viewvc?rev=835563&view=rev
Log:
OPENJPA-1380: query cache is not evicted invalid object when a   cross-join jpql is involved.

Modified:
    openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
    openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java

Modified: openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=835563&r1=835562&r2=835563&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Thu Nov 12 21:31:31 2009
@@ -669,7 +669,8 @@
         // which is the desired candidate
         if (ctx().schemaAlias == null)
             setCandidate(cmd, alias);
-
+        else
+            addAccessPath(cmd);
         return exp;
     }
 

Modified: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java?rev=835563&r1=835562&r2=835563&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java (original)
+++ openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestBulkJPQLAndDataCache.java Thu Nov 12 21:31:31 2009
@@ -35,6 +35,7 @@
     public void setUp() throws Exception {
         setUp("openjpa.DataCache", "true",
             "openjpa.RemoteCommitProvider", "sjvm",
+            CLEAR_TABLES, 
             AllFieldTypes.class, CascadeParent.class, CascadeChild.class);
 
         OpenJPAEntityManager em = emf.createEntityManager();
@@ -123,4 +124,35 @@
             getResultList().size());
         em.close();
     }
+    
+    public void testCrossJoinQueryCache() {
+        EntityManager em = (OpenJPAEntityManager) emf.createEntityManager();
+        // create
+        em.getTransaction().begin();
+        CascadeParent p = new CascadeParent();
+        p.setName("p1");
+        CascadeChild c = new CascadeChild();
+        c.setName("p1");
+        p.setChild(c);
+        em.persist(p);
+        em.getTransaction().commit();
+
+        // query
+        String jpql = "select p.name, c.name from CascadeParent p, CascadeChild c where p.name = c.name "
+                + "and p.name = 'p1'";
+        javax.persistence.Query query = em.createQuery(jpql);
+        List result1 = query.getResultList();
+        assertEquals(1, result1.size());
+
+        // update
+        em.getTransaction().begin();
+        c.setName("c1");
+        em.getTransaction().commit();
+
+        // query again
+        List result2 = query.getResultList();
+        assertEquals(0, result2.size());
+        em.close();
+    }
+    
 }