我们都知道,在同一个类,无事务方法调用有事务的方法,事务不会生效,对此作阐释的文章网上也很多,那反过来呢?
public class AdminService {
@Autowired
AdminDao adminDao;
@Transactional(rollbackFor = Exception.class)
public int updateAdmin(AdminPo adminPo) {
int result = adminDao.update(adminPo);
int num = this.insertAdmin();
// 造异常语句
// int exception = 1/0;
return result;
}
private int insertAdmin() {
AdminPo adminPo = new AdminPo();
adminPo.setId(2);
adminPo.setName("jackson");
adminPo.setPassWord("196516");
int result = adminDao.insert(adminPo);
return result;
}
}
如上代码,使用1/0造异常,事务方法以下称为方法A,私有方法称为方法B,假设那么有以下两种情况:
- 方法A调用方法B后,方法A出异常,A、B方法是否都会回滚?
执行前:
执行后:
因此,事务生效了,A B 均回滚 - 方法A调用方法B时,方法B出异常,A、B方法是否都会回滚?
执行后:
A B 均回滚
总结
同一类中事务方法调非事务方法,两个方法都会生效事务