- 如果同类A方法调用B方法有事务,如果不手动回滚会导致回滚失败。
- 正确的做法是建个类将B方法写到新类,通过spring来管理,就可以做到事物的传播性来实行自动回滚。
- 如果一定需要在本类实现回滚,那么就需要手动回滚事物,如下:
@Transactional(rollbackFor = Exception.class)
public String deleteUser(Long userId){
try {
userMapper.deleteUserById(userId);
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new AddException();
}
return "删除成功。";
}
@Transactional(rollbackFor = Exception.class)
public String deleteUserWife(Long wifeId){
if (userMapper.deleteUserWifeById(wifeId) <= 0) {
log.warn("删除用户:删除用户妻子:失败。");
throw new DelException();
}
return "删除成功。";
}