事务问题,程序断点不断开情况下,不同用户点击同一方法,进入同一事务。

实际操作:

A,B两个用户,操作两笔订单出库,这两笔订单中的商品时同一个。

1、我先在service中断点,然后A用户点击出库按钮,这时事务没有提交,库存也没有更新到数据库。

2、B用户选择他的订单,也点击出库,这时候B也进入这个出库方法。

我的库存更新是通过乐观锁控制的,mysql事务级别是REPEATABLE-READ可重复读,这时候我的库存更新乐观锁是失效的,库存会只扣减B用户订单数。

我的想法:两个用户应该是两个事务,在第一个A事务提交之后(XXX.update()应该会加上排他锁),B过来的第二个事务,这时候应该由于版本号不一致,报错才对。

PsiInv dbInv = .findById(invId)BigDecimal beforeQty = dbInv.getInv()dbInv.setInv(dbInv.getInv().subtract(moveQty))
        .setUpdateCount(dbInv.getUpdateCount())
        .update()


评论区

hb963724769

2019-05-29 15:56

数据库中,开启一个事务后,对同一行数据调用update后,事务没有提交前,应该其他事务都不能对这行数据执行update方法啊。

热门反馈

扫码入社