【发布时间】:2013-06-30 02:37:26
【问题描述】:
环境-
Hibernate-查询缓存和二级缓存已启用
已使用缓存 - 将 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