Spring 的 DataAccessException

Spring的DataAccessException

   Spring的DAO框架沒有拋出與特定技術相關的異常,例如SQLException或HibernateException,拋出的異常都是與特定技術無關的org.springframework.dao.DataAccessException類的子類,避免系統與某種特殊的持久層實現耦合在一塊兒。DataAccessException是RuntimeException,是一個無須檢測的異常,不要求代碼去處理這類異常,遵循了Spring的通常理念:異常檢測會使代碼處處是不相關的catch或throws語句,使代碼雜亂無章;而且NestedRuntimeException的子類,是能夠經過NestedRuntimeException的getCause()方法得到致使該異常的另外一個異常。Spring的異常分類有
spring

Spring的DAO異常層次

異常數據庫

什麼時候拋出框架

CleanupFailureDataAccessException 一項操做成功地執行,但在釋放數據庫資源時發生異常(例如,關閉一個Connection)
DataAccessResourceFailureException 數據訪問資源完全失敗,例如不能鏈接數據庫
DataIntegrityViolationException Insert或Update數據時違反了完整性,例如違反了唯一性限制
DataRetrievalFailureException 某些數據不能被檢測到,例如不能經過關鍵字找到一條記錄
DeadlockLoserDataAccessException 當前的操做由於死鎖而失敗
IncorrectUpdateSemanticsDataAccessException Update時發生某些沒有預料到的狀況,例如更改超過預期的記錄數。當這個異常被拋出時,執行着的事務不會被回滾
InvalidDataAccessApiusageException 一個數據訪問的JAVA API沒有正確使用,例如必須在執行前編譯好的查詢編譯失敗了
invalidDataAccessResourceUsageException 錯誤使用數據訪問資源,例如用錯誤的SQL語法訪問關係型數據庫
OptimisticLockingFailureException 樂觀鎖的失敗。這將由ORM工具或用戶的DAO實現拋出
TypemismatchDataAccessException Java類型和數據類型不匹配,例如試圖把String類型插入到數據庫的數值型字段中
UncategorizedDataAccessException 有錯誤發生,但沒法歸類到某一更爲具體的異常中

Spring的DAO異常層次是如此的細緻縝密,服務對象可以精確地選擇須要捕獲哪些異常,捕獲的異常對用戶更有用的信息,哪些異常可讓她繼續在調用堆棧中向上傳遞。工具

相關文章
相關標籤/搜索