Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 指定@Transactional rollbackFor是否也包括RuntimeException_Java_Spring_Exception_Transactions_Rollback - Fatal编程技术网

Java 指定@Transactional rollbackFor是否也包括RuntimeException

Java 指定@Transactional rollbackFor是否也包括RuntimeException,java,spring,exception,transactions,rollback,Java,Spring,Exception,Transactions,Rollback,该事务是否会回滚,或者我是否需要在注释中也包含RuntimeException.class?无需在rollboor列表中包含RuntimeException。即使你不提它,它也会处理的。 我已经为jdbcTemplate试用过:- 输出: 插入后: 1迪帕克35000 2约格什35000 3阿迪蒂亚35000 更新异常 更新后 1迪帕克35000 2约格什35000 3阿迪蒂亚35000 但是,请注意,Spring框架的事务 默认情况下,基础结构代码将仅标记 在运行时回滚,未检查的异常;就是什

该事务是否会回滚,或者我是否需要在注释中也包含RuntimeException.class?

无需在
rollboor
列表中包含
RuntimeException
。即使你不提它,它也会处理的。

我已经为jdbcTemplate试用过:-

输出: 插入后: 1迪帕克35000 2约格什35000 3阿迪蒂亚35000 更新异常 更新后 1迪帕克35000 2约格什35000 3阿迪蒂亚35000 但是,请注意,Spring框架的事务 默认情况下,基础结构代码将仅标记 在运行时回滚,未检查的异常;就是什么时候, 抛出的异常是RuntimeException的实例或子类。 (默认情况下,错误也会导致回滚。)选中 不会导致从事务方法引发的异常 在正在回滚的事务中


因此它也可以使用CheckedException(默认情况下为RuntimeException)回滚,例如:

Output: After Insertion: 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000 update exception After Update 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000
@AlexBeardsley thnx指出了错误。。。我修改了答案。。我重新运行了代码。。是的,您不需要在rollbackFor列表中包含运行时异常。@AkshayKasar如果我不尝试,我就不会发布。根据我的经验,当您这样做时,人们开始复制您的代码而不了解它是如何工作的,然后,由于您不知道他们关于回滚/异常处理的真正意图,因此很难查看他们的代码。因此,我只希望在
rollboor
中列出选中的异常。在大多数情况下,这与
抛出的
声明中的内容相同,因此维护起来并不困难。同样,在大多数情况下,我会避免抛出异常,因为无法判断实际抛出了哪些已检查的异常。这仍然不能解释Rollbackor是加法还是替换RuntimeException/Error的默认行为。
@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");
}
Output: After Insertion: 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000 update exception After Update 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000
@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();
    }
}