You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重复保存Endpoint实体触发OptimisticLockException问题求助

求助:OptimisticLockException 循环出现的诡异问题

各位好,我最近碰到一个特别棘手的问题,折腾了好久没找到根源,想请大家帮忙分析下思路。

我的技术栈是JavaEE、PostgreSQL、JSF2.2、Primefaces,现在遇到的情况是:首次保存Endpoint实体完全正常,但再次保存就会抛出OptimisticLockException,错误提示“行已被其他事务更新或删除”。更诡异的是,报错之后再点保存又能成功,然后再保存又失败,呈现“成功→失败→页面重载→成功→失败”的循环状态。

已经做过的排查和尝试

  • 翻遍了Stack Overflow上相关问题,排查过版本号维护、并发修改这些常见场景,但我的问题情况有特殊性
  • 仔细检查过Endpoint实体的所有关联关系和子实体,没发现异常的更新操作
  • 试过两种更新方式:
    • super.update:底层调用EntityManager.merge方法
    • super.updateNoMerge:仅执行更新前后的触发器逻辑,不触发merge操作
      不管用哪种方式,第二次更新时都会在执行count查询的环节触发异常

相关代码说明

  • Endpoint实体:带有@Version注解的实体类,通过版本号字段实现乐观锁控制,字段维护逻辑看起来正常
  • EndpointService:负责实体的保存更新逻辑,依赖父类的update/updateNoMerge方法完成核心操作
  • persistence.xml:配置了PostgreSQL数据源及JPA基础属性,没有特殊的锁策略配置

错误日志核心信息

javax.persistence.OptimisticLockException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [org.meveo.model.technicalservice.endpoint.Endpoint#xxx]
异常堆栈指向count查询执行阶段,最终在事务提交时触发版本校验失败

有没有大佬遇到过类似的循环异常情况?求给点排查方向或者解决思路,万分感谢!

内容的提问来源于stack exchange,提问作者czetsuya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:37:56