记录报错batch update returned unexpected row count from update [0]; actual row count:0:expected:1;

文章描述了一个接收单据接口的问题,由于上游系统补发导致接口频繁执行。当第一次执行失败后,接口会重试,但因事务管理问题,第一次重试可能因未提交事务而成功,后续重试可能因事务已提交失败。作者指出,这种情况无需特殊处理,因为数据已由报文接收。
摘要由CSDN通过智能技术生成

前言:接收单据的接口,失败了上游系统会定时补发,一分钟一次。 我们接过来之后如果执行失败了会重新执行三次。
在这里插入图片描述
红色的三条报了同样的错误,都是在一个 查询数据的地方

commonDao.findByQuery(orderDetail.class, id);

在执行上面呢个方法前,会有一个

commonDao.save(orderDatail);

往 findByQuery 底层代码看 会有一个 HiberNateTemplate.execute 再往下看 ,
会有 HiberNateTemplate.doExecute 的方法。
他在执行 save的时候其实没有将事务提交,但是在 execute 、doExecute 这里会提交所有事务,这会导致第一个重新执行的提交成功(绿色框的),后面同时执行的提交失败(红色框的)。

其实这里报这个错误就不用特殊处理了,因为数据已经有个报文接进来了。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值