0

我有一个带有两个按钮的页面,单击每个按钮实际上调用了两个不同类中的方法,这些类中注入了 entityManager。

现在,当在类 1 中调用方法 save() 时,将使用最新值更新实体。在方法返回之前,我调用entityManager.flush()以便将更改刷新到数据库中。

紧接着,如果我单击调用类 2 的方法 Advance() 的另一个按钮并使用 加载相同的实体entityManger.find(entity.class, Long.valueOf(entityId)),则在上一个方法调用中更新的字段显示为null

我是否需要进行任何配置以确保不会发生这种情况,或者我如何在这两个类之间共享实体管理器,以便我可以确保刷新操作后的调用在更新的数据库上工作。

4

1 回答 1

1

事务已提交。那不是问题。

EntityManager.find()方法的 java 文档:

如果实体实例包含在持久性上下文中,则从那里返回。

这意味着:如果它已经存在于您的 entityManager 中,则 find 不会从数据库中获取该对象。

要刷新实体,只需调用refresh(entity)

MyEntity myEntity = entityManger.find(MyEntity.class, Long.valueOf(entityId));
entityManger.refresh(myEntity);
于 2013-09-13T11:34:26.060 回答