禁用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问题。 想弄明白这个问题。