java - 如何处理JPA中的OptimisticLockException

标签 java jpa

我有 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/

相关文章:

javascript - 如何将 Spring Mvc Controller 5 连接到 jsp 文件?

hibernate - 使用Spring data jpa批量更新

java - JPQL 连接( hibernate )

java - 使应用程序成为已知服务,以对应用程序进行 Kerberize 化

java - 插入组件后使 JScrollPane 滚动到底部的正确方法是什么?

java - servlet 登录站点后不重定向页面,在网络中,仪表板文件的状态代码超过 200,但没有重定向

java - EntityManager 能知道它死了吗?

java : advanced inheritance to jpa

Spring JPA - 如何使用 NativeQuery 创建 Pageable?

java - Tomcat 运行但在尝试访问我的 html 时给出 404,但在安装后显示 tomcat 的默认页面