当前位置: 首页 > 网络应用技术

尝试{} catch {}不会回滚

时间:2023-03-08 12:21:15 网络应用技术

  我在程序中添加了@transactional,我报告了一个错误,但没有回滚。为什么?

  这是因为在@transaction程序中添加了尝试{} catch {}。

  为什么?因为只有在RuntimeException或错误才能触发时,才能触发@transactional注释没有任何属性,才能滚动。常见的非RuntimeException不会触发交易的滚动。

  如果当抛出非runtimeException时也会触发回滚机制,我们需要将reallbackfor = {except.class}属性添加到注释中。

  使用 @transactional(rollbackfor = {exception.class})抛出捕获的非RuntimeException异常。

  使用@transactional(rollbackfor = {exception.class})注释声明声明滚动级别的方法,在捕获异常时直接在CACH语句中直接抛出异常捕获。

  以上代码包括处理方法:

  1.@tracsactional(rollbackfor = {exception.class}),投掷捕获的非runtimeException异常

  2.手动回滚交易:

  TransactionSpectsupport.currenttranactionstas()。setrollbackonly();

  3,在运行时抛出异常:抛出新的RuntimeException(消息);

  如果这三种方法不起作用,您可以调用此方法的方法,请添加@transactional

  将@transactional添加到先前的方法中,无论调用什么调用方法,如果有错误,将执行回滚。

  原始:https://juejin.cn/post/709847685506494501