mybatis并发问题解决,参考hibernate
银⾏两操作员同时操作同⼀账户就是典型的例⼦。⽐如A、B操作员同时读取⼀余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户减去 50元,A先提交,B后提交。最后实际账户余额为1000-50=950元,但本该为 1000+100-50=1050。这就是典型的并发问题
⼀个简单的解决办法:更新的时候给版本号字段加上 1,然后 UPDATE 会返回⼀个更新结果的⾏数,通过这个⾏数去判断。
update account set price = #price #,version=version+1
jpa mybatiswhere id=#id# and version=#vsersion#
如果更新执⾏返回的数量是 0 表⽰产⽣并发修改了,需要重新获得最新的数据后再进⾏更新操作。
Hibernate、JPA 等 ORM 框架或者实现,是使⽤版本号,再判断 UPDATE 后返回的数值,如果这个值⼩于 1 时则抛出乐观锁并发修改异常。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论