我目前正在编写一个棘手的更新任务,其中单个Entity对象可能在原子事务中多次更新。我的合并操作如下所示(为了清楚起见,省略尝试 / 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提供程序。
答案 0 :(得分:1)
持久上下文:持久性上下文是一组托管实体实例,对于任何持久性实体标识,都有一个唯一的实体实例。在持久化上下文中,实体实例及其生命周期由实体管理器管理。
merge():将给定实体的状态合并到当前的持久化上下文中。
因此,在持久化上下文中一次只存在一个实体实例。因此,即使您多次更新您的实体,它也只会在事务提交时反映到数据库中一次。