如何绕过JPA level2缓存进行查询和查找

时间:2013-05-06 09:59:02

标签: google-app-engine google-cloud-datastore jpa-2.0 datanucleus

我在GAE上使用JPA2启用了level2缓存(jcache / memcache)。我必须运行一些更新事务,并希望它们依赖于数据存储数据而不是缓存数据。我尝试在使用JPA find方法时将javax.persistence.cache.retrieveMode属性设置为“BYPASS”,但它似乎根本不起作用。所以我想知道datanucleus JPA2是否可以进行高速缓存旁路?

代码示例:

if (bypassCache) {
        return find(className, Collections.Collections.<String,Object>singletonMap("javax.persistence.cache.retrieveMode",CacheRetrieveMode.BYPASS));
    }
    else return find(className);

我正在使用datanucleus 3.1.3和appengine 1.7.7.1。

谢谢!

在阅读了datanucleus的源代码后,我明白现在没有为find方法实现JPA缓存旁路。任何人都可以确认吗?

事实上,无论您设置什么属性,EntityManager.find()方法似乎都是L2缓存的。我做了一个JPQL查询,查询结果不是L2缓存。 (默认情况下,datanucleus.query.results.cached为false)。所以我的理解是我应该使用Queries来精确控制L2缓存。

0 个答案:

没有答案