Hibernate 自动查询缓存失效

Hibernate 自动查询缓存失效,hibernate,caching,Hibernate,Caching,我试图理解hibernate查询缓存是如何工作的。 我现在看到的是,当我向数据库中插入新实体时,Hibernate不会自动更新其二级缓存(尽管我只使用Hibernate调用)。 我找到的唯一方法是在插入新实体后手动清理缓存 这里有一个更具体的例子。 我有一个名为Container的持久实体,它可以有许多项。我想缓存所有项目: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) class Item { // rest of the cod

我试图理解hibernate查询缓存是如何工作的。 我现在看到的是,当我向数据库中插入新实体时,Hibernate不会自动更新其二级缓存(尽管我只使用Hibernate调用)。 我找到的唯一方法是在插入新实体后手动清理缓存

这里有一个更具体的例子。 我有一个名为Container的持久实体,它可以有许多项。我想缓存所有项目:

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) class Item { // rest of the code ... } class Container { @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List getItems() { ... } // rest of the code ... } 3) 重复第一步
然后在第三步中,我看不到在第二步中插入的项目。 只有在插入新项目后手动清理缓存时,我才能看到它们:

   sessionFactory.evictCollection("Container.items", updatedContainerId)
我的直觉告诉我Hibernate应该自动执行这样的缓存失效。有人看到它工作了吗?我是做错了什么,还是只是不受支持

提前谢谢你的回答。 问候语
Tom

Hibernate使用由查询(或查询名称)和指定参数值组成的键存储查询数据。我想当您修改数据时,它不容易知道要使哪个缓存失效


要解决此问题,您只需拨打电话。

您可能会发现我关于查询缓存工作的博客有助于了解查询缓存的功能以及它可能无法按您认为的方式工作的原因:


是,本机SQL查询不存在查询缓存自动失效。对于HQL查询,如果参与查询的任何表对任何对象具有INSERT/UPDATE/DELETE,它只会清除所有缓存

所以您可以尝试project,它的目的是通过自动更新SQL查询缓存而不失效来解决此问题


注:“蜥蜴比尔”谢谢你的理解:)

我前几天刚刚回答了这个问题:你想在这个答案中至少对这个话题的问题做一个简单的解释吗?
   hibernateTemplate.save(item)
   sessionFactory.evictCollection("Container.items", updatedContainerId)