我们已通过设置
禁用了缓存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)我们在为所有查询命中数据库时的性能开销很好
答案 0 :(得分:1)
您正在使用的API为您提供了共享serverSession,您不应该将其用于查询,因为您已禁用共享缓存。相反,您需要支持EntityManager的UnitOfWork,因为这将为此上下文维护缓存和对象。
entityManager.unwrap(UnitOfWork.class).executeQuery(readAllQuery);