指定@Transactional rollbackFor还包括RuntimeException
@Transactional(rollbackFor = MyCheckedException.class) public void foo() { throw new RuntimeException(); }
这个事务会被回滚,还是我还需要在注释中包含RuntimeException.class?
无需在rollbackFor
列表中包含RuntimeException
。 即使你没有提到它,它也会处理它。
我已经尝试过jdbcTemplate: –
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = MyException.class) public void updateSalary(final int increment){ jdbcTemplate.update("update EMPLOYEE set emp_salary = emp_salary + ?", increment); throw new RuntimeException("update exception"); }
输出: 插入后: 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000 更新例外 更新后 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000
但是,请注意,默认情况下,Spring Framework的事务基础结构代码仅在运行时未经检查的exception情况下标记事务以进行回滚; 也就是说,抛出的exception是RuntimeException的实例或子类。 (错误也将 – 默认情况下 – 导致回滚。)从事务方法抛出的已检查exception不会导致事务回滚。
资源
这可能有所帮助: 使用已检查和未检查的exception进行Spring事务管理
因此它也可以使用CheckedException回滚(默认情况下为RuntimeException),例如:
@Transactional(rollbackFor = Exception.class) public void save(Book book) throws Exception { bookRepository.save(book); System.out.println("Saved in transcation."); // No data is persisted if (true) { throw new Exception(); } }
- 在Java HTTP连接中将客户端证书设置为请求属性?
- javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给persist的分离实体
- 用于HTTP错误的Javaexception类是什么?
- com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:为键’PRIMARY’复制条目”
- 如何使用Intellij Idea的exception断点
- 仅当没有Exception的映射时,才会调用@ExceptionHandler for Error
- 扫描程序错误,我无法弄清楚:NoSuchElementException
- Android – Eclipse项目制作和R文件错误
- 虽然Socket无法连接,但它不会抛出exception
- RESTEasy Mock vs. Exception Mapper vs. Context
- 了解NoSuchMethodexception中的方法签名