【问题标题】:Disable JPA EclipseLink 2.4 cache禁用 JPA EclipseLink 2.4 缓存
【发布时间】:2012-11-17 11:16:45
【问题描述】:

我正在尝试禁用 EclipseLink 2.4 缓存,因此如果数据在 DB 中被其他应用程序更改,相同的数据会在我使用 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:总而言之,我希望所有查询和查找调用都会刷新从数据库中获取的数据。

【问题讨论】:

    标签: java caching jpa eclipselink


    【解决方案1】:
    <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。

    【讨论】:

    • 我向你保证,你提到的这两个配置没有影响。我尝试了每一个,然后都尝试了 - 数据仍然从缓存中返回。但是关于“没有长寿的 EntityManagers”的想法是一个有趣的想法。因为现在在整个应用程序中创建了一个 EntityManager,它是使用我自己的单例方法 getInstance() 创建的。我还是想看看是否有禁用缓存的解决方案。
    • 现在我想提一下,这些配置并没有解决问题,而是解决了我遇到的问题。如果有人会回答如何禁用缓存,我向你保证我会重新接受这个答案。对我有帮助的东西 - 我使用了一个 EntityManager,我在整个应用程序中都保持活力。我重做了管理EntityManager 的方式,现在我不需要禁用缓存,因为每个EntityManager 在创建后都有干净的缓存。
    【解决方案2】:

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

    不可能!

    【讨论】:

      【解决方案3】:

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

      <property name="eclipselink.query-results-cache" value="false"/>
      

      在一个请求中通过 JPA 更改实体后,然后在下一个请求中获取实体,仍然出现 OptimisticLocking 问题。试图找出问题所在。

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 2011-03-29
        • 2014-01-22
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多