我在我的网络应用程序中使用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个小时说一次?
感谢
答案 0 :(得分:1)
默认情况下启用第一级缓存,您无法禁用它。即,persistence.xml文件中的任何设置都不会禁用第一级缓存。
您只能通过调用
清除所有实体管理器对象entityManager.clear()
这将使后续查询进入数据库(第一次),然后对象再次存储在缓存中
在您的情况下,您需要将实体管理器对象存储在某个寄存器中,并且每3小时循环一次以调用clear()函数。
您可以通过调用
强制每个查询直接转到数据库query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);