Eclipselink缓存和Session对象

时间:2015-04-07 08:28:35

标签: database caching eclipselink

我们已通过设置

禁用了缓存
eclipselink.cache.shared.default=false

但是这个改变导致ReadAllQuery失败并带有消息

org.eclipse.persistence.exceptions.QueryException
Exception Description: Queries on isolated classes, or queries set to use exclusive connections, must not be executed on a ServerSession or, in CMP, outside of a transaction.

失败的查询是

entityManager.unwrap(Session.class).executeQuery(readAllQuery);

我尝试设置以下参数

eclipselink.query-results-cache=false
eclipselink.refresh=true

仍然发生同样的异常。有人可以帮助解决这个问题。

1)禁用JPA缓存的最佳方法是什么,并确保所有查询都进入数据库(以确保所有计算机之间的数据一致性)。所有写入/更新/读取都应该对数据库对象起作用,并且应该是一致的。

2)我们在为所有查询命中数据库时的性能开销很好

1 个答案:

答案 0 :(得分:1)

您正在使用的API为您提供了共享serverSession,您不应该将其用于查询,因为您已禁用共享缓存。相反,您需要支持EntityManager的UnitOfWork,因为这将为此上下文维护缓存和对象。

entityManager.unwrap(UnitOfWork.class).executeQuery(readAllQuery);