一,为什么框架中根本没有对Exception的一般子类进行回滚配置,异常发生时,事务都进行了回滚 ,说好的只会对RuntimeException(Unchecked 非受检异常)回滚呢?

此时,我们就有必要了解一下,RuntimeException所包含的子类具体有哪些:

这时,或许你就明白了 : 平常代码运行阶段经常遇到的那些异常,其实都是RuntimeException的子类。

受检异常(Checked)一般在编译期就被检出,这就给你造成了一个Spring对于所有异常都会发生回滚的误解。

下面给出一些受检CHECKED异常:

  org.springframework.dao.DuplicateKeyException 应该是RuntimeException的子类

三,作出结论,是SQL异常属于RuntimeException的子类?还是默认配置一般异常也会回滚呢?                            
                   ① 查看接口文档java.lang.SqlException, 
                        java.lang.Object
                             |____java.lang.Throwable
                                  |____ java.lang.Exception
                                       |____ java.lang.SQLException

可以看出java.lang.SqlException,确实是Exception的直接子类,属于CHECKED受检异常,事务是不会因为它发生回滚的!

② 实际上,当我们在项目开发中加入了Spring框架以后,SQL异常都被org.springframework重写,正如上面的重复主键的SQL异                                      常。
                       产生原因:很显然该异常原因属于一般异常,而被Spring捕捉后抛出其他自定义的RuntimeException

我们知道 org.springframework.dao.DuplicateKeyException来自spring-tx-4.0.0.RELEASE.jar
                      反编译可见:
                      java.lang.Object
                               |____java.lang.Throwable
                                    |____ java.lang.Exception
                                         |____ java.lang.RuntimeException
                                              |____ org.springframework.core.NestedRuntimeException
                                                  |____org.springframework.dao.DataAccessException
                                                       |____  org.springframework.dao.NonTransientDataAccessException
                                                           |____org.springframework.dao.DataIntegrityViolationException
                                                               |____org.springframework.dao.DuplicateKeyException
                     同样方法可以查得:org.springframework.dao中的异常都是RuntimeException的子类

得出结论:Spring框架下,所有SQL异常都被org.springframework重写为RuntimeException,事务因此也会发生回滚!

原文链接: https://blog.csdn.net/qq_32331073/article/details/76525372

哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚的更多相关文章

  1. sql 关于dblink和多条update、insert事务回滚写法

    在存储过程的编写中难免会遇到调用同库他人的proc和跨库调用proc,还有一个proc中有多条对多表进行写入和修改的语句.那么就会用到tran. 如果我们在不写try的情况下就要对每个insert,u ...

  2. Spring异常抛出触发事务回滚

    Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...

  3. (转)spring异常抛出触发事务回滚策略

    背景:在面试时候问到事务方法在调用过程中出现异常,是否会传递的问题,平时接触的比较少,有些懵逼. spring异常抛出触发事务回滚策略 Spring.EJB的声明式事务默认情况下都是在抛出unchec ...

  4. Spring事务回滚和异常类

    1.异常的一些基本知识 异常的架构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable.Error和RuntimeException及其子类成为未检查异常( ...

  5. Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

    导读:​一段被try-catch包裹后的代码在产线稳定运行了200天后忽然发生了异常,而这个异常竟然导致了产线事务回滚.这期间究竟发生了什么?日常在项目过程中该如何避免事务异常?就在这个时候,老板拿着 ...

  6. SQL Server事务回滚对自增键的影响

    SQL Server事务回滚时是删除原先插入导致的自增值,也就是回滚之前你你插入一条数据导致自增键加1,回滚之后还是加1的状态 --如果获取当前操作最后插入的identity列的值:select @@ ...

  7. SQL 事务回滚

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...

  8. 【SQL】事务回滚

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...

  9. SQL事务回滚 写法(转)

    以下是SQL 回滚的语句:方案一:SET   XACT_ABORT   ON--如果产生错误自动回滚GOBEGIN   TRANINSERT   INTO   A   VALUES   (4)INSE ...

随机推荐

  1. fail2ban防止SSH暴力破解

    [root@kazihuo /srv]# wget https://github.com/fail2ban/fail2ban/archive/0.8.14.tar.gz [root@kazihuo / ...

  2. 戴尔R720xd服务器系统安装

    型号:R720xd 开启服务器,Ctrl+R进入raid配置 配置完raid后F2对硬盘进行格式化 保存并重启 F11进入BIOS选项设置U盘启动 选择U盘启动 开始进行系统安装!

  3. 利用github协作开发步骤

    项目使用IDEA开发,IDEA上可以加载很多的插件(而且下载很快),安装github插件,安装git 首先一个成员需要创建好代码库,这个代码库存放项目,所有的开发提交代码都是向这个库提交,在githu ...

  4. 16.C++-初探标准库

    在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...

  5. redis集群离线安装

    环境准备: redis-4.0.7.tar.gz redis的安装包 Ruby环境(集群搭建需要用ruby创建, ruby环境在2.2以上.) rubygems-2.7.4.tgz 和 redis-3 ...

  6. phpcms v9 搜索结果列表页时间显示1970问题解决方案

    对于喜欢用phpcms v9 的小伙伴来说,在调用时间时,总会出现时间1970这样的问题,对于这个问题,网上的说法很多,内容页时间显示通常不会问题,搜索结果页就不行了,通过总结,发现使用{format ...

  7. 第一次作业:来自一个奋斗的IT学子

    第一部分 结缘计算机 1.1你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 说起为何结缘了计算机,就得谈谈专业报考了,我觉得我的报考真是一个反面教科书了.由于高中以前每天只要想着 ...

  8. 网络1711c语言第0次作业总结

    作业地址:https://edu.cnblogs.com/campus/jmu/JMUC--NE17111712/homework/861 总结 1.评分标准 以下要求中除了未交和抄袭0分,其他项最多 ...

  9. 第五次作业-需求&原型改进

    需求&原型改进 0. 团队介绍 团队名称:121ComeOn 项目名称:个人博客项目 团队组成: PM:黄金筱(107) 成员:王枫(031),刘烨(255),周明浩(277) github地 ...

  10. Linux kernel 的 sendfile 是如何提高性能的

    Linux kernel 的 sendfile 是如何提高性能的 现在流行的 web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢? ...