我有 OptimisticLockException,如下代码所示(错误代码:entity = em.merge(entity);),因为当用户从 diffrenet 浏览器选项卡中同时单击“保存”按钮两次时。 注意:entity.getOid() 不为空! 谁能帮帮我...
public static synchronized KirKiraciSozlesmeYeniKayitForm kaydet(KirKiraciSozlesmeYeniKayitForm form, EntityManager em) {
KirKiraciSozlesme entity = new KirKiraciSozlesme();
UtilInsCore.copyProperties(form, entity);
if (entity.getOid() == null) {
Long oid = DBUtil.getSeqNextValue(em, "KIR_KIRACI_SOZLESME_SEQ");
entity.setOid(oid);
}
entity = em.merge(entity);
em.flush();
UtilInsCore.copyProperties(entity, form);
return form;
}
提前谢谢您。
最佳答案
这是正确的 JPA 行为。
当用户第一次单击“保存”按钮时,实体版本字段会增加。因此,当用户在第二个选项卡版本中单击“保存”按钮时,JPA 会生成乐观锁异常。
如果用户在第一个选项卡中更改 field1
并保存它,并在第二个选项卡中更改 field2
并保存,并且没有乐观异常,实体状态会是什么?
您可以通知用户第二次该实体已被其他用户更改并重新加载新的实体状态或类似的内容...
关于java - 如何处理JPA中的OptimisticLockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34926337/