mirror of https://github.com/apache/openjpa.git
OPENJPA-1380: queryCache is not refreshed for cross-join jpql.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@835054 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ab18db113b
commit
983b34b68e
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql
openjpa-persistence-jdbc/src/test
java/org/apache/openjpa/persistence/datacache
resources/org/apache/openjpa/persistence/datacache/common/apps/META-INF
|
@ -827,6 +827,8 @@ public class JPQLExpressionBuilder
|
||||||
// which is the desired candidate
|
// which is the desired candidate
|
||||||
if (ctx().schemaAlias == null)
|
if (ctx().schemaAlias == null)
|
||||||
setCandidate(cmd, alias);
|
setCandidate(cmd, alias);
|
||||||
|
else
|
||||||
|
addAccessPath(cmd);
|
||||||
|
|
||||||
return exp;
|
return exp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ public class TestBulkJPQLAndDataCache
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
setUp("openjpa.DataCache", "true",
|
setUp("openjpa.DataCache", "true",
|
||||||
"openjpa.RemoteCommitProvider", "sjvm",
|
"openjpa.RemoteCommitProvider", "sjvm",
|
||||||
|
CLEAR_TABLES,
|
||||||
AllFieldTypes.class, CascadeParent.class, CascadeChild.class);
|
AllFieldTypes.class, CascadeParent.class, CascadeChild.class);
|
||||||
|
|
||||||
OpenJPAEntityManager em = emf.createEntityManager();
|
OpenJPAEntityManager em = emf.createEntityManager();
|
||||||
|
|
|
@ -19,20 +19,17 @@
|
||||||
package org.apache.openjpa.persistence.datacache;
|
package org.apache.openjpa.persistence.datacache;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
import javax.persistence.EntityManagerFactory;
|
||||||
import org.apache.openjpa.datacache.*;
|
|
||||||
import javax.persistence.*;
|
|
||||||
import org.apache.openjpa.persistence.*;
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.openjpa.persistence.datacache.common.apps.CacheObjectE;
|
|
||||||
import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
|
|
||||||
|
|
||||||
|
import org.apache.openjpa.datacache.ConcurrentQueryCache;
|
||||||
import org.apache.openjpa.persistence.OpenJPAEntityManager;
|
import org.apache.openjpa.persistence.OpenJPAEntityManager;
|
||||||
|
import org.apache.openjpa.persistence.OpenJPAPersistence;
|
||||||
import org.apache.openjpa.persistence.OpenJPAQuery;
|
import org.apache.openjpa.persistence.OpenJPAQuery;
|
||||||
|
import org.apache.openjpa.persistence.common.utils.AbstractTestCase;
|
||||||
|
import org.apache.openjpa.persistence.datacache.common.apps.CacheObjectE;
|
||||||
|
|
||||||
public class TestQueryResultSize
|
public class TestQueryResultSize
|
||||||
extends AbstractTestCase {
|
extends AbstractTestCase {
|
||||||
|
@ -47,6 +44,8 @@ public class TestQueryResultSize
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
System.out.println("****Deleted Records "
|
System.out.println("****Deleted Records "
|
||||||
+ deleteAll(CacheObjectE.class));
|
+ deleteAll(CacheObjectE.class));
|
||||||
|
deleteAll(CascadeParent.class);
|
||||||
|
deleteAll(CascadeChild.class);
|
||||||
Map propsMap = new HashMap();
|
Map propsMap = new HashMap();
|
||||||
propsMap.put("openjpa.DataCache", "true");
|
propsMap.put("openjpa.DataCache", "true");
|
||||||
propsMap.put("openjpa.QueryCache", "true");
|
propsMap.put("openjpa.QueryCache", "true");
|
||||||
|
@ -81,4 +80,36 @@ public class TestQueryResultSize
|
||||||
pm.getEntityManagerFactory()).getQueryResultCache().getDelegate())).
|
pm.getEntityManagerFactory()).getQueryResultCache().getDelegate())).
|
||||||
getCacheMap().size());
|
getCacheMap().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testCrossJoinQueryCache() {
|
||||||
|
pm = (OpenJPAEntityManager) _pmf.createEntityManager();
|
||||||
|
// create
|
||||||
|
startTx(pm);
|
||||||
|
CascadeParent p = new CascadeParent();
|
||||||
|
p.setName("p1");
|
||||||
|
CascadeChild c = new CascadeChild();
|
||||||
|
c.setName("p1");
|
||||||
|
p.setChild(c);
|
||||||
|
pm.persist(p);
|
||||||
|
endTx(pm);
|
||||||
|
|
||||||
|
// 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 = pm.createQuery(jpql);
|
||||||
|
List result1 = query.getResultList();
|
||||||
|
assertEquals(1, result1.size());
|
||||||
|
|
||||||
|
// update
|
||||||
|
startTx(pm);
|
||||||
|
c.setName("c1");
|
||||||
|
endTx(pm);
|
||||||
|
|
||||||
|
// query again
|
||||||
|
List result2 = query.getResultList();
|
||||||
|
assertEquals(0, result2.size());
|
||||||
|
endEm(pm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
<persistence-unit name="TestConv" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="TestConv" transaction-type="RESOURCE_LOCAL">
|
||||||
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
|
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
|
||||||
|
|
||||||
|
<class>org.apache.openjpa.persistence.datacache.CascadeChild</class>
|
||||||
|
<class>org.apache.openjpa.persistence.datacache.CascadeParent</class>
|
||||||
<class>org.apache.openjpa.persistence.datacache.common.apps.AppIdCacheObject</class>
|
<class>org.apache.openjpa.persistence.datacache.common.apps.AppIdCacheObject</class>
|
||||||
<class>org.apache.openjpa.persistence.datacache.common.apps.AttachA</class>
|
<class>org.apache.openjpa.persistence.datacache.common.apps.AttachA</class>
|
||||||
<class>org.apache.openjpa.persistence.datacache.common.apps.AttachB</class>
|
<class>org.apache.openjpa.persistence.datacache.common.apps.AttachB</class>
|
||||||
|
|
Loading…
Reference in New Issue