Hibernate、Java 和 Ehcache 陈旧数据

问题描述

我是 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...