定义了一个service:UserService其中有个方法定义如下:
@Transactional(propagation = Propagation.REQUIRES_NEW)public void saveException(User user){ userDao.save(user); throw new RuntimeException("异常"); }
如果我在Controller层直接调用这个方法,是可以进行回滚的,但如果我把这个方法再包一层,如下:
public void saveInnerException() { User user1 = new User(); user1.setName("李四"); this.saveException(user1); }
saveInnerException还是在同一个service中,并且这个方法没有加事务,这个时候,如果Controller层调用saveInnerException方法,事务会进行提交,这个很奇怪,发生了异常,应该回滚才对。
我又进行了另外的测试,这次我重新定义了一个service:UserService2,里边有个非事务方法,如下:
public void test(){ User user = new User(); user.setName("李四"); userService.saveException(user); }
如果Controller调用UserService2的test方法,这时事务就会回滚了。同样是多了一层调用,结果为什么不一样?
慕妹3242003