当前位置:  开发笔记 > 运维 > 正文

自动查询缓存失效

如何解决《自动查询缓存失效》经验,为你挑选了1个好方法。

我试图了解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 ... }

我注意到的问题是,当我:

1)从db读入一些容器到内存(连同相应的项目)

   String hql =
      "from Container c left join fetch c.items where c.type = 1";
   List list = hibernateTemplate.find(hql);

2)为所选容器插入新项目

   hibernateTemplate.save(item)

3)重复第一步
然后在第3步中我看不到我在第二步中插入的项目.只有在插入新项目后手动清理缓存时才会看到它们:

   sessionFactory.evictCollection("Container.items", updatedContainerId)

我的直觉告诉我,Hibernate应该自动执行这样的缓存失效.有没有人看到它的工作?我做错了什么还是不支持?

在此先感谢您的回答.问候汤姆



1> Alex Miller..:

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

http://tech.puredanger.com/2009/07/10/hibernate-query-cache/

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有