为什么我的 EntityManager 正在获取过时的数据库对象

Why my is EntityManager fetching outdated database object

情况:

问题: 我只是不明白为什么 App A 继续将状态视为未决。我已经尝试了很多方法来确保 entityManager 已清除缓存(对于应用程序 A 和应用程序 B),但应用程序 A 查询最终仍会获得错误的状态。

@Baldurian 感谢提示。我在获取的对象上添加了刷新并且它起作用了。我通过子对象获取状态。事实证明,即使 App A 在每次查询之前清空了缓存,子对象也从未被刷新。不完全是我预期的行为。

EclipseLink 默认维护一个 second level cache,它在 EntityManager 之外,为什么清除 EntityManager 缓存没有帮助。

您可以如上所述进行刷新,但这需要了解何时进行更改,以便您知道何时需要刷新 - 并且需要小心,因为刷新会清除更改。

如果您要经常在此 JPA 应用程序之外进行更改,最好禁用部分或所有实体上的共享缓存。 <property name="eclipselink.cache.shared.default" value="false"/> 属性 可用于为所有实体禁用它,或者您可以使用 @Cache 注释

有选择地挑选