当调用EntityManager.flush()时,它是否也会刷新第二个缓存?

时间:2012-01-18 17:58:48

标签: java jpa

调用EntityManager.flush()时,它是否会刷新二级缓存?我尝试使用谷歌搜索,我也试过冲洗它似乎确实如此,但确定它是好的。

编辑:现在它似乎不会刷新二级缓存。

2 个答案:

答案 0 :(得分:1)

JPA没有二级缓存的概念(它不是规范的一部分)。因此,二级缓存的行为完全取决于JPA提供程序。你在使用什么Hibernate,EclipseLink,OpenJPA?

更新:我得到了部分纠正,JPA 2.0引入了一些控制二级缓存使用的选项(如@Cachable

答案 1 :(得分:0)

L2缓存应该(默认情况下,在任何合理的JPA实现中)在提交而不是刷新时进行更新,但这不是JPA2规范中的强制要求,因此您需要了解实现细节。 DataNucleus当然只在提交时更新它。如果在刷新时更新了L2缓存,然后这些对象更改回滚,则会导致读取潜在的无效/非持久数据。有些人可能会允许这样做。