Database Eclipselink缓存和会话对象

Database Eclipselink缓存和会话对象,database,caching,eclipselink,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

我们已通过设置禁用缓存

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) 我们对为所有查询命中数据库的性能开销很满意

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

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

谢谢你的回复。我能够使用Query Query=((JpaEntityManager)entityManager.getDelegate()).createQuery(readAllQuery.getResultList();如果能加上评论,那就太好了,为什么会加“-1”,因为这会帮助我提高?