1

我在 GAE 上使用启用了二级缓存(jcache/memcache)的 JPA2。我必须运行一些更新事务,并希望它们依赖数据存储数据而不是缓存数据。在使用 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() 方法似乎总是被二级缓存。我做了一个 JPQL 查询,查询结果没有 L2 缓存。(datanucleus.query.results.cached 默认为 false)。所以我的理解是我应该使用查询来更好地控制二级缓存。

4

0 回答 0