#Spring事务失效问题,先看代码,Spring 事务已开启@EnableTransactionManagement
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void saveTable(TableVo tableVo) {
//1、保存表结构
TableEntity tableEntity = new TableEntity();
BeanUtils.copyProperties(tableVo, tableEntity);
save(tableEntity);
//2、保存字段
tableVo.getFields().forEach(field ->field.setTableId(tableEntity.getId()));
fieldService.saveBatch(tableVo.getFields());
//3、创建表 create 操作
tableDao.createTable(tableVo);
}
断点调试发现,在开始执行第三步时。前面两步已经提交,
第3步执行失败不会导致前面两步回滚,当执行到DDL语句时,会隐式的将当前回话的事务进行一次“COMMIT”操作,因此在MySQL中执行DDL语句时,应该严格地将DDL和DML完全分开,不能混合在一起执行