0

环境-

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

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

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

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

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

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

4

1 回答 1

-1

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

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

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

于 2013-07-24T09:17:31.490 回答