auto-flush机制导致主键冲突的问题

- 背景:批量创建订单流程中,创建子订单时出现子订单ID冲突。

- 下图中,第一个子订单创建完成由于不是独立事务后不会立马提交insert语句。而是在第二个子订单的重复校验(查询订单表)中触发了auto-flush提交了insert语句。但是在此时在提交完订单表的insert语句后,提交订单相关表的insert语句中时由于订单相关表过大,或者数据库压力过大导致超时。但是由于没有事务,所以已经执行过的insert语句不会回滚。

接着,代码catch住了auto-flush抛出的异常,并且又查询了一次订单表,此时由于之前autoFlush失败,session中还是存在脏数据,所以会再次触发autoFlush,最终导致insert主键冲突

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值