gpt4 book ai didi

java - 禁用 JPA EclipseLink 2.4 缓存

转载 作者:搜寻专家 更新时间:2023-11-01 02:13:01 24 4
gpt4 key购买 nike

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

<shared-cache-mode>NONE</shared-cache-mode>
...
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.size.default" value="0"/>
<property name="eclipselink.cache.type.default" value="NONE"/>
<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.refresh" value="true"/>

唯一有用的选择是:

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

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

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

EDIT2:总而言之,我希望所有查询和查找调用都会刷新从数据库中获取的数据。

最佳答案

<shared-cache-mode>NONE</shared-cache-mode>
or,
<property name="eclipselink.cache.shared.default" value="false"/>

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

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

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

EclipseLink 还支持 WEAK EntityManagers,但正确的设计是不要使用长生命周期的 EntityManagers。

关于java - 禁用 JPA EclipseLink 2.4 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com