【发布时间】: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