【发布时间】:2010-09-14 18:08:06
【问题描述】:
我试图了解休眠查询缓存的真正工作原理。 我现在看到的是,当我将新实体插入数据库时,Hibernate 不会自动更新其二级缓存(尽管我只使用 Hibernate 调用)。 我发现让它工作的唯一方法是在插入新实体后手动清理缓存。
这是更具体的例子。 我有一个名为 Container 的持久实体,它可以有许多项目。我想缓存所有项目:
@Cache(使用 = CacheConcurrencyStrategy.READ_WRITE) 类项目 { //剩下的代码... } 类容器{ @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)公共列表 getItems() { ... } //剩下的代码... }
我注意到的问题是,当我:
1) 将数据库中的一些Containers读入内存(连同对应的item)
String hql =
"from Container c left join fetch c.items where c.type = 1";
List<Item> list = hibernateTemplate.find(hql);
2) 为选定的容器插入新项目
hibernateTemplate.save(item)
3) 重复第一步
然后在第三步中,我看不到我在第二步中插入的项目。
只有在插入新项目后手动清理缓存时才会看到它们:
sessionFactory.evictCollection("Container.items", updatedContainerId)
我的直觉告诉我,Hibernate 应该自动执行这样的缓存失效。有没有人看到它工作?我做错了什么还是不支持?
提前感谢您的回答。 你好 汤姆
【问题讨论】:
-
前几天我刚刚回答了这个问题:stackoverflow.com/questions/4500221/…