JPA:如何将持久性上下文与批量更新或删除的结果同步?

Phi*_*hil 5 java jpa eclipselink

在ejb-3_0-fr-spec-persistence.pdf中有一个声明,它读取

持久性上下文与批量更新或删除的结果不同步

因此,如果我执行query.executeUpdate,它会从表中删除行.那些相同的行仍然存在于另一个实体中的一对多集合中.当我重新启动应用程序时,我看到幻像实体现在已从集合中删除.

那么有一种(很好的\简单\通用)方式将JPA的缓存与批量更新\删除的结果同步吗?

BTW.我使用EclipseLink,版本:Eclipse Persistence Services - 1.1.0.r3634.

谢谢,

菲尔.

Chs*_*y76 5

你必须要小心你在这里使用"缓存"这个词,因为它可能意味着不同的东西.

突出显示的短语讨论了持久化上下文,可以将其视为"第一级缓存".要使用数据库中的最新更改进行更新,您可以:

  1. 调用EntityManager.refresh()来刷新单个实体的状态.
  2. 或者完全丢弃实体管理器实例(在适当地刷新/清除更改之后)并从实体管理器工厂获取新的实例.您在此新实例中加载的任何实体都将从数据库加载,因此包含最新更改.

然后,还可能存在未绑定到特定实体管理器的"第二级高速缓存".您可以使用自己的API刷新它(或者更确切地说,清除并让它重新填充)(缓存提供者之间不同).