在事务中包含实体两次会对任何事情造成伤害吗?

时间:2012-04-05 04:16:02

标签: jpa-2.0 eclipselink

我目前正在编写一个棘手的更新任务,其中单个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提供程序。

1 个答案:

答案 0 :(得分:1)

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

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

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