禁用JPA EclipseLink 2.4缓存

我正在尝试禁用EclipseLink 2.4缓存,因此如果其他应用程序在数据库中更改了数据,则在我的应用程序中刷新相同的数据,使用EclipseLink 2.4,而不重新启动它。 这些属性似乎都不起作用:

NONE ...      

帮助的唯一选择是:

 typedQuery.setHint(QueryHints.REFRESH, HintValues.TRUE); 

但这对我来说不是一个选项,因为现在该应用程序已编写,我不想搜索所有查询或em.find()方法并将此提示放入。

编辑1:此处描述了类似的问题: http : //eclipse.1072660.n5.nabble.com/Notifications-about-external-database-changes-td5389.html

编辑2:总结一下,我希望所有查询和查找调用都会刷新从数据库中获取的数据。

 NONE or,  

是正确的机制。 或者对特定类使用@Cache批注。

我假设您的问题是您对两个查询使用相同的EntityManager。 EntityManager还需要维护它管理的所有实例的缓存。 始终刷新这些对象会导致应用程序所做的任何更改被丢弃。 (EntityManager是一个事务对象)。

您应该为每个请求或每个事务创建一个新的EntityManager,或者调用clear()来丢弃其托管对象。

EclipseLink还支持WEAK EntityManagers,但正确的设计是没有长期存在的EntityManagers。

我想我有同样的问题 。 我只是试图通过persistence.xml缓存属性( shared-cache,eclipselink-cache …)清除所有缓存,但随机我得到了一个实体的旧实例,显然没有任何模式…..

没门!

我为每个请求创建新的EntityManager,

  

在一个请求中通过JPA更改实体后,然后在下一个请求中获取实体,仍然会得到OptimisticLocking问题。 想弄明白这个问题。