JPA-update方法使用踩坑记

本文介绍了在使用JPA时遇到的一个问题,即在事务未提交前,MQ消息触发的更新操作覆盖了之前对同一订单的字段更新。问题的关键在于两个方法间的事务处理和数据查询时机。解决方案包括使用本地SQL更新和调整事务边界。总结强调了对不熟悉技术的谨慎使用和理解框架特性的重要性。
摘要由CSDN通过智能技术生成

JPA踩坑问题

最近项目中使用了JPA,在使用JPA的时候,由于疏忽,出现了一个问题,还是因为对JPA不熟悉导致的,问题是这样的:

先总结说一下问题的原因:
在A方法中,对数据库的订单表(order)的date字段进行更新,但是在事务还没有提交的时候,收到了mq消息,会更新order表的状态字段status,但是由于A方法还没有提交事务,所以,mq更新状态字段的方法会覆盖A方法中的date更新信息,将date覆盖为A方法更新之前的值

在这里插入图片描述
这里我解释下时序图的意思:

  1. A系统是我这里负责的系统,B系统是我的下游,在客户预约时间之后,我首先会把客户的预约时间存到数据库的订单表里面,这是时序图中第一步做的事情
  2. 第二步:会把这个时间同步给下游,这里就是一个简单的dubbo接口的调用
  3. 第三步,我这里会接着处理其他的一些逻辑,但是有一个问题:1、2、3这三步,是在同一个事务里面,这样的话,只有在1、2、3全部完成的时候,才会提交事务,把时间更新到数据库的订单表里面
  4. 但是在第2步,调用了下游接口之后,下游会发一个mq消息回来,通知我的A系统,进行一个状态的变更,也就是updateStatus方法,这里的状态并不是我自己订单的状态,而
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值