#java异常与@Transactional
概述:java的异常分为Error 和 Exception 。这两类都是接口Throwable 的子类。
异常分类方式:
1.运行时异常 和 非运行时异常
2.可查的异常(checked exceptions)和 不可查的异常(unchecked exceptions)
总结 :
- 基本除IOException和SQLException外,其他都是运行时异常。
- 运行时异常属于unchecked exceptions,所以其他属于checked exceptions。可以理解为:运行时异常是无法预知的错误,所以为不可查异常(unchecked exceptions)。
@Transactional回滚
1.Error一定会回滚。
2.异常中:运行时异常(unchecked exceptions)一定会回滚。而非运行时异常(checked exceptions),如IOExceptions和SQLExceptions不会回滚。
让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
让unchecked例外不回滚: @Transactional(noRollbackFor=RunTimeException.class)
注意: 如果异常被try-catch了,事务就不回滚了,必须抛向被@Transactional注解的层。
参考: