0

我目前正在编写一个棘手的更新任务,其中单个实体对象可能会在原子事务中多次更新。我的合并操作看起来像这样(为了清楚起见,省略了try / catch):

@PersistenceContext protected EntityManager   em;
@Resource           protected UserTransaction utx;    
...
utx.begin();
for (Record r : listOfRecords) em.merge(r);
utx.commit();

如果列表中有多个对给定实体的引用,会发生什么不好的事情吗?

这与 EclipseLink 2.3.2 作为 JPA 提供者有关。

4

1 回答 1

1

持久性上下文:持久性上下文是一组托管实体实例,其中对于任何持久性实体身份,都有一个唯一的实体实例。在持久化上下文中,实体实例及其生命周期由实体管理器管理。

merge() :将给定实体的状态合并到当前持久化上下文中。

因此,在持久上下文中一次只存在一个实体实例。因此,即使您多次更新实体,它也只会在事务提交时反映到数据库中一次。

于 2012-04-05T05:54:59.223 回答