如何在EclipseLink中清除/刷新缓存

时间:2017-07-04 12:05:00

标签: java eclipselink

我在我的网络应用程序中使用persistence.xml中的以下设置(我使用Eclipselink 2.6.4):

<properties> 
    <property name="eclipselink.jdbc.cache-statements" value="true" />        
    <property name="eclipselink.cache.query-results" value="true" /> 
    <property name="eclipselink.ddl-generation.index-foreign-keys" value="true" />
    <property name="eclipselink.logging.level" value="OFF" />        
    <property name="eclipselink.persistence-context.close-on-commit" value="true" />        
    <property name="eclipselink.persistence-context.flush-mode" value="commit" />        
    <property name="eclipselink.persistence-context.persist-on-commit" value="false" />
</properties>

我使用@Cacheable(false)注释来阻止某些实体被缓存。
版本2.6.4中@Cache注释不再起作用。
我的问题是,是否有可能在全球范围内清除缓存?每隔3个小时说一次?
感谢

1 个答案:

答案 0 :(得分:1)

默认情况下启用第一级缓存,您无法禁用它。即,persistence.xml文件中的任何设置都不会禁用第一级缓存。

您只能通过调用

清除所有实体管理器对象
entityManager.clear()

这将使后续查询进入数据库(第一次),然后对象再次存储在缓存中

在您的情况下,您需要将实体管理器对象存储在某个寄存器中,并且每3小时循环一次以调用clear()函数。

您可以通过调用

强制每个查询直接转到数据库
query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);