哪些異常是RuntimeException?Sql異常屬於RuntimeException嗎?Spring下SQL異常事務回滾


一,為什么框架中根本沒有對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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM