【问题标题】:Hibernate Query cache does not returns newly added entityHibernate Query 缓存不返回新添加的实体
【发布时间】:2013-06-30 02:37:26
【问题描述】:

环境-

  1. Hibernate-查询缓存和二级缓存已启用

  2. 已使用缓存 - 将 updatetimestampcache 设置为永恒的 Ehcache。

问题- 对于实体​​ E,我在表中有 2 行。因此,在使用 setcacheable(true) 通过条件查询(获取所有行)时,第一次填充二级缓存和查询缓存。

通过使用 setcacheable(true) 的条件进一步执行相同的查询是从查询缓存中提供的。到目前为止一切顺利。

问题-在使用休眠保存实体 E 的新对象后(现在实体 E 的表中没有 3 行),通过事务服务层方法。 为实体 E 获取行的任何进一步查询(使用 setcacheable(true))仅返回 2 个对象。其中应该返回 3 个对象。

当新实体保存在其表中时,似乎未验证实体 E 的查询缓存。

【问题讨论】:

  • 要么:更新并没有真正发生/提交,或者更新时间戳没有更新......你可以做些什么来缩小问题所在,尝试不同的 2LC 提供程序,以看看问题出在 EhCache 还是 Hibernate 上。您可以尝试 Infinispan(github.com/galderz/secondlc 中的一些示例)。即使对于插入,您也可以使用 READ_ONLY 并避免需要 JTA 事务。

标签: hibernate ehcache second-level-cache query-cache


【解决方案1】:

所以这就是我认为的根本原因,它是我的应用程序使用 ehcahce 的方式。 详情如下

  1. 我有两个独立的应用程序托管在同一个 tomcat 中。
  2. 这两个应用程序都使用相同的 jar(每个应用程序的库中都有一个 jar),它连接到数据库并加载 ehcache。

很明显,如果应用程序 A 确实插入,它只会使自己的 ehcache 无效。由于托管在同一个tomcat中的其他应用程序B有自己的ehcahe区域,应用程序b将继续使用陈旧数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2022-10-18
    • 2011-05-11
    相关资源
    最近更新 更多