ejb-3_0-fr-spec-persistence.pdf中有一条声明,内容如下:

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

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

那么,是否有一种(nice\simple\generic)同步JPA缓存与批量update\delete结果的方法?

顺便提一句。我正在使用EclipseLink,版本:Eclipse Persistence Services-1.1.0.r3634。

谢谢,

菲尔

最佳答案

您必须注意如何在此处使用“缓存”一词,因为它可能表示不同的含义。

突出显示的短语讨论了持久性上下文,可以将其视为“一级缓存”。为了使用数据库中的最新更改来更新它,您可以执行以下任一操作:

  • 调用EntityManager.refresh()以刷新单个实体的状态。
  • 或完全丢弃实体管理器实例(在适本地刷新/清除更改之后),然后从实体管理器工厂获得一个新实例。您将从此新实例中加载的所有实体都将从数据库加载,因此包含最新更改。

  • 然后,可能还存在未绑定(bind)到特定实体管理器的“第二级缓存”。您可以使用其自己的API(在缓存提供程序之间有所不同)刷新(或清除并重新填充它)。

    关于java - JPA:如何将持久性上下文与批量更新或删除的结果同步?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1468674/

    10-08 23:02
    查看更多