【发布时间】:2015-02-02 15:56:48
【问题描述】:
考虑这样一种情况:用户删除具有主键值 x 的实体 A,然后在同一事务中插入另一个具有相同主键值 x 的实体。然后提交事务。 A 有一个版本字段。因此,新创建实体的版本字段为零
发生乐观锁定异常,说明在事务提交时,具有主键 x 的实体 A 可能已被更新或删除。
我试过工作单元点应该先执行删除,但会出现相同的结果。
有没有办法告诉 jpa 这是一个新实体。
【问题讨论】:
-
为什么先插入再删除?能不能不更新一下?
-
它是一个新实体吗?如果实体仍然具有相同的 ID - 它是相同的实体,对吗?
-
您是否在这些实体中覆盖了 equals?
-
在同一个 EntityManager 中同时存在 2 个具有相同 id 的实体违反了 JPA 规范。唯一接近的就是获取已删除的实体并重新保留它。
-
我正在使用 unsync 扩展实体管理器,然后在用户按下保存按钮时加入事务。用户可以删除实体,然后创建另一个具有相同 ID 的实体。这些东西对用户/测试者没有意义。所以这个案子是真实的
标签: java jpa eclipselink