我在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缓存。