【问题标题】:Does Hibernate 2nd-Level cache invalidate when running a JPQL update statement运行 JPQL 更新语句时,Hibernate 2 级缓存是否失效
【发布时间】:2011-01-02 16:34:39
【问题描述】:

当您运行 JPQL 更新或删除查询时,Hibernate 是否足够智能以使更改的实体的二级缓存无效?

人为的例子:

你有 JPQL:

update Product p set p.status = 'S' where p.name like 'Monitor%'

如果在运行该语句时您当前在二级缓存中有产品,Hibernate 会使缓存中的所有产品无效,还是它对缓存没有任何作用,二级缓存中的产品现在无效?

仅供参考...我正在使用带有 Hibernate 和 JBossCache 的 JBoss 5.1

【问题讨论】:

  • 有趣。我想你可以检查一下 - 设置 showSql=true (或者如果不使用 JPA,用于在控制台上显示 sql 输出的 hibernate 属性),并查看 hibernate 是否再次从数据库中获取刚刚使用 hql 更新的实体。
  • 这只会告诉你它是否将这些项目重新加载到缓存中,我不认为它会这样做。它不会告诉您的是,如果它使缓存无效,那么该实体的所有实例都必须从数据库中重新加载。我想我只需要做一个测试并找出答案。我希望这里有人能快速回答。

标签: hibernate second-level-cache


【解决方案1】:

在运行我自己的测试并在 this bug 上运行后,它似乎会使整个二级缓存失效,而不仅仅是更新中涉及的任何实体的二级缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多