Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理JPA中的OptimisticLockException_Java_Jpa - Fatal编程技术网

Java 如何处理JPA中的OptimisticLockException

Java 如何处理JPA中的OptimisticLockException,java,jpa,Java,Jpa,我有OptimisticLockException,如下代码所示(错误代码:entity=em.merge(entity);),因为当用户在diffrenet浏览器选项卡上同时单击两次save按钮时。 注意:entity.getOid()不是null 谁能帮我 public static synchronized KirKiraciSozlesmeYeniKayitForm kaydet(KirKiraciSozlesmeYeniKayitForm form, EntityManager em)

我有OptimisticLockException,如下代码所示(错误代码:entity=em.merge(entity);),因为当用户在diffrenet浏览器选项卡上同时单击两次save按钮时。 注意:entity.getOid()不是null 谁能帮我

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;
}

提前感谢。

请尝试在代码中添加以下内容:

...
em.lock(entity, LockModeType.PESSIMISTIC_WRITE);

     if (entity.getOid() == null) {
            Long oid = DBUtil.getSeqNextValue(em, "KIR_KIRACI_SOZLESME_SEQ");
            entity.setOid(oid);
        } 
        entity = em.merge(entity);

        em.getTransaction().commit();//To unlock the Entity
...

希望这有帮助。

这是正确的JPA行为。 当用户第一次单击“保存”按钮时,“实体版本”字段增加。所以,当用户在第二个选项卡中单击save按钮时,版本不同,JPA生成乐观锁异常。 如果用户在第一个选项卡中更改
field1
并保存,在第二个选项卡中更改
field2
并保存,实体状态将是什么?
您可以在第二次通知用户,该实体已被其他用户更改,并重新加载新实体状态或类似的内容…

问题是什么?我需要解决此场景为什么用户希望在问题乐观时执行悲观锁定?根据我的研究,这是正确的JPA行为。在这种情况下,我应该在捕捉区给你留言。谢谢