问题描述
我是 hibernate 和 ehcache 的相对业余用户。 我在预先存在的应用程序(使用 Hibernate v5.1.4.Final 和 Ehcache v2.6.11)上遇到了一个问题,数据集被无限期缓存,直到缓存被禁用或应用程序重新启动。>
我已将 ehcache.xml 配置为:
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timetoIdleSeconds="300"
timetoLiveSeconds="300"
overflowTodisk="true"
/>
<cache
name="org.hibernate.cache.UpdateTimestampsCache"
maxEntriesLocalHeap="5000"
overflowTodisk="true"
timetoLiveSeconds="300"
timetoIdleSeconds="300"
eternal="false"
/>
<cache
name="org.hibernate.cache.StandardQueryCache"
maxEntriesLocalHeap="500"
overflowTodisk="true"
eternal="false"
timetoLiveSeconds="300"
/>
<cache
name="dbItem"
maxElementsInMemory="1000"
eternal="false"
timetoIdleSeconds="30"
timetoLiveSeconds="30"
overflowTodisk="true"
/>
</ehcache>
我已经为 db 模型装饰了类,例如:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE,region = "dbItem")
public class DbItem { .. }
List<DbItem> result = entityManager.createquery(criteria).setHint("org.hibernate.cacheable",true).getResultList();
当我手动更新数据库时,300 秒后我仍然看到不正确的结果。 具体来说,我看到的是一个“名称”列表,它是数据库记录“dbItem.Name”上的一个字段,永远不会改变。
首次加载时(应用程序重启后),我可能会通过应用程序视图在项目列表中看到“Peter 1”。如果我直接在数据库中将其更新为“Peter 2”,然后等待 300 多秒,然后在浏览器上刷新页面,我仍然看到“Peter 1”。 在我重新启动应用程序之前,我认为缓存已被强制转储。
任何帮助将不胜感激 - 提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)