关于处理hibernate乐观锁抛异常ObjectOptimisticLockingFailureException问题

本文介绍了一种在乐观锁失败时采用递归方法进行重试的解决方案。通过捕获特定异常,实现对用户表、提现表及订单表的更新操作,并确保数据的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要解决方案是在捕捉异常的时候使用递归方法对乐观锁重试

  public void optimisticLockingFailureSave(BizUser bizUser, RefundLog refundLog, TradeOrderLog order) {
        try {
            if (bizUser != null) {
                bizUser.setVersion(bizUserService.findOne(bizUser.getId()).getVersion());
                bizUserService.save(bizUser);
                logger.info("用户表更新成功");
            } else if (refundLog != null) {
                refundLog.setVersion(refundLogService.findOne(refundLog.getId()).getVersion());
                refundLogService.save(refundLog);
                logger.info("提现表更新成功");
            } else if (order != null) {
                order.setVersion(tradeOrderLogService.findOne(order.getId()).getVersion());
                tradeOrderLogService.save(order);
                logger.info("订单表更新成功");
            }
        } catch (Exception e) {
            if (e instanceof ObjectOptimisticLockingFailureException || e instanceof StaleObjectStateException || e instanceof TransactionSystemException) {
                if (bizUser != null) {
                    logger.info("更新用户表乐观锁重试");
                    optimisticLockingFailureSave(bizUser, null, null);
                } else if (refundLog != null) {
                    logger.info("更新提现表乐观锁重试");
                    optimisticLockingFailureSave(null, refundLog, null);
                } else if (order != null) {
                    logger.info("更新TradeOrderLog表乐观锁重试");
                    optimisticLockingFailureSave(null, null, order);
                }
            }
        }
    }



调用:
 user.setLastModifiedBy("provider:refunded");
                                           
 //更新用户表
optimisticLockingFailureSave(user, null, null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值