- 背景:批量创建订单流程中,创建子订单时出现子订单ID冲突。
- 下图中,第一个子订单创建完成由于不是独立事务后不会立马提交insert语句。而是在第二个子订单的重复校验(查询订单表)中触发了auto-flush提交了insert语句。但是在此时在提交完订单表的insert语句后,提交订单相关表的insert语句中时由于订单相关表过大,或者数据库压力过大导致超时。但是由于没有事务,所以已经执行过的insert语句不会回滚。
接着,代码catch住了auto-flush抛出的异常,并且又查询了一次订单表,此时由于之前autoFlush失败,session中还是存在脏数据,所以会再次触发autoFlush,最终导致insert主键冲突
1410

被折叠的 条评论
为什么被折叠?



