图一:
图二:
图一是spring的事务处理相关的源代码
图二是业务代码
如果发生图二中的new Exception('红冲单据明细为空);的异常,spring事务是不会回滚的,因为spring回滚的时候会判断异常类型,要是RuntimeException或者Error的类型才会回滚。除非这样写才会回滚:@Transactional(rollbackFor = { RuntimeException.class, Exception.class });
推荐大家在正常的业务流程开发的过程中,自定义异常类继承RuntimeException ,比如自定义ApplicationException extends RuntimeException ,然后在自己的业务代码里面new ApplicationException();