关于spring的@Transaction的回滚

如果第一条修改语句失败第二条插入语句回滚该如何处理?

@Transactional(transactionManager = "xxTransactionManager", rollbackFor = Exception.class)
void demo(Model model) throws Exception {
    if (update(model) <= 0) {
        return;
    }
    
    if (insert(model) <= 0) {
        throw new Exception("Failed");
    }
}

 

没理解你的意思,你是想第一条修改语句失败然后进行插入一条语句吗?

1.如果是这样你直接判断就可以,不需要回滚.

2.如果不是,如果你是想在事务里面第一条修改语句失败抛出异常再在进行插入语句的话,你可以在事务里面进行try捕获异常,你也可以进行判断,你的插入是否成功,如果不成功,你也可以利用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()进行手动回滚

是@Transactional吧

1.多条sql放在一个方法里,从上到下顺序执行

2.在方法上写注解@Transactional

3.那么,这些sql如果有一个操作失败,就都会回滚了

那就为这两个方法都添加事务,设置传播行为是REQUIRED.