好几个月没写了,今天来记录下困惑的问题,声明式事务自调用时的失效问题。从网上找了很多的资料,对照着这些解释,我自己敲代码想实现这个失效。
Oracle数据库表:
测试代码(同一个类中):
@Override
public void updateUser() {
this.delete(3);
this.insertUser();
System.out.println("成功!");
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Integer id) {
usersMapper.delete(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void insertUser() {
List<Vo> users = new ArrayList<>();
Vo vo1 = new Vo(8,"zhang","111",0);
Vo vo2 = new Vo(9,"li","222",0);
Vo vo3 = new Vo(10,"sun","333",2);
users.add(vo1);
users.add(vo2);
users.add(vo3);
usersMapper.insertUser(users);
throw new RuntimeException("异常");
}
在实际的操作过程中,发现delete方法执行成功后,insertUser方法执行报错。此时,delete方法回滚了,insertUser方法也回滚了,数据库没有更新。
执行后的数据库表:
并没有像网上说的那样,前面保存的不会回滚。脑壳疼,不知道问题出在哪,此篇求助大佬、好心人,点拨我一下,感谢!