我在尝试理解Hibernate查询缓存是如何工作的。
现在我所看到的是,当我使用Hibernate调用时向数据库插入新实体时,Hibernate不会自动更新其二级缓存。
我发现使缓存生效的唯一方法是手动清除缓存后插入新实体。
以下是一个更具体的示例:
我有一个名为Container的持久化实体,它可以包含许多Item。我希望将所有项都缓存下来:
```
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
class Item
{
// 其余代码...
}
class Container { @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List getItems() { ... }
// 其余代码... } ```
我注意到的问题是: 当我: 1)从数据库中读取一些容器(以及相应的项目)到内存中
class Container { @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List getItems() { ... }
// 其余代码... } ```
我注意到的问题是: 当我: 1)从数据库中读取一些容器(以及相应的项目)到内存中
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应该自动执行这样的缓存失效。有人见过它正常工作吗?是我做错了什么还是不支持呢?
提前感谢您的回答。 问候 Tom