我在程序中添加了@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