正在回答
同学你好。同学说的是在讲事务注解的时候那个测试吗?其实引起事务回滚的BadSqlGrammarException还是继承自RuntimeException的,它本质上还是一个运行时异常呢~
如果解答了同学的疑问,望采纳~
祝学习愉快~
同学你好。首先抱歉老师误会了同学的意思,导致没有解决同学的疑问。是的,默认情况下只有RuntimeException才能回滚事务,即使是spring在管理事务。
下面来重新解释下:
1、Exception是异常,他又分为运行时异常RuntimeException和非运行时异常(检查异常),其中这个检查异常是代码中必须处理,否则编译无法通过的异常。
图来自第一阶段 Java异常 2-2节 异常分类:
2、Spring进行事务管理时,默认地使用@Transactional 只在抛出运行时RuntimeException 时才标识事务回滚。当直接抛出Exception时,由于不能确定是否是运行时异常,所以无法直接标识回滚。
逻辑上,也是使用RuntimeException更为合理,运行时异常就是代码逻辑问题导致代码不能继续运行下去的异常。运行异常是用来标识一种调用方本身无法处理或恢复的程序错误。
如果想要抛出Exception也会回滚,需要使用@Transactional(rollbackFor = Exception.class)。
如果解答了同学的疑问,望采纳~
试错视频在该处
老师,这个老师在视频里有演示过,试错过,老师在视频里把ShopOperationException继承自RuntimeException改为继承自Exception 然后再执行事务就没有回滚了,那么是不是说只有RuntimeException才能回滚事务呢 即使是spring在管理事务?
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星