mybatis-plus
mybatis-plus copied to clipboard
saveBatch下的事务问题
当前使用版本(必填,否则不予处理)
3.5.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
当调用IService下的saveBatch最终会调用SqlHelper.executeBatch方法,
方法中会调用sqlSession先提交一下
SqlSessionHolder sqlSessionHolder = (SqlSessionHolder) TransactionSynchronizationManager.getResource(sqlSessionFactory);
boolean transaction = TransactionSynchronizationManager.isSynchronizationActive();
if (sqlSessionHolder != null) {
SqlSession sqlSession = sqlSessionHolder.getSqlSession();
//原生无法支持执行器切换,当存在批量操作时,会嵌套两个session的,优先commit上一个session
//按道理来说,这里的值应该一直为false。
sqlSession.commit(!transaction);
}
虽然是非强制提交,但是,如果saveBatch上面有insert/update等操作,这个时候如果这个方法体是外包一层事务,那么insert、update会被实际执行;后续如果saveBatch报错啥的,无法回滚;
重现步骤(如果有就写完整)
@Transactional(rollbackFor = Exception.class)
public Response<Void> addData(List<Abc> list) {
service.save(new Abc());
service.saveBatch(list);
throw new Exception();
}
报错信息
我也遇到这个问题了
有下文吗
我也遇到了
https://github.com/baomidou/mybatis-plus/issues/4893