2015-04-07 47 views
-1

我们通过设置的EclipseLink缓存和Session对象

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”,因为它会帮助我改进? – Thiyanesh

回答

0

您使用的是给你共享的ServerSession它,因为你已经禁用共享缓存,你不应该为查询使用API​​数据库具有优良的性能开销。相反,您需要UnitOfWork支持EntityManager,因为这将为此上下文维护一个缓存和对象。

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

感谢您的回复。我能够使它与 查询查询=((JpaEntityManager)entityManager.getDelegate())。createQuery(readAllQuery).getResultList(); – Thiyanesh