【发布时间】:2014-04-06 14:01:14
【问题描述】:
假设我想合并一个分离的实体。 当我这样做时
T mergedEntity = entityManager.merge(detachedEntity);
entityManager 将从数据库加载一个实体(与 detachedEntity 具有相同的标识符)并将所有数据从 detachedEntity 复制到新加载的实体。当稍后我的事务结束时,这个实体将被保存到数据库中。
但是,在并发场景中,数据库中的实体可以被其他事务更新,该实体首先加载到我的事务中,然后在我的事务结束时刷新。 在这种情况下,我想知道是否会抛出 OptimisticLockException ?如果是这样,为什么合并 API 没有在 Java 文档中指定 OptimisticLockException? http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#merge(T)
谢谢
【问题讨论】:
-
我认为合并不会从数据库中检索生成的托管实体,而只会克隆给定的分离实例。 AFAIK无论如何都会在启用乐观锁定时检索版本值。我希望@JB Nizet 确认他是否不介意。