本文介紹了Spring CrudRepository可以拋出什么運行異常?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有這個Spring數據CrudRepository
,它處理數據庫上的CRUD操作。
@Repository
public interface IUserRepository extends CrudRepository<User, String> {
}
User
是My DB的用戶表的實體。CrudRepository
將以下操作添加到存儲庫:
delete(String ID)
findOne(String ID)
save(User user)
如documentation中所述,如果給定的id為空,則刪除和查找操作將引發IllegalArgumentException
,而保存操作不會引發任何異常。
問題是CrudRepository的javadoc沒有提到這些操作引發的其他異常。例如,它不會告訴delete(String ID)
操作在提供的ID在數據庫中不存在的情況下拋出EmptyResultDataAccessException
。
在save(User user)
操作的javadoc中,不清楚在插入違反一個數據完整性約束(唯一字段和外鍵)的新用戶時拋出哪些異常。此外,無論您編寫的是新用戶還是現有用戶,它都不會發出警告:它只是創建一個新用戶或覆蓋(如果存在)(因此這是一個插入+更新操作)。
在企業應用程序中,我應該能夠捕獲操作可以引發的每個可拋出的異常,并且我應該在操作的javadoc中閱讀這一點。
您是否了解有關CrudRepository
異常的明確文檔?
推薦答案
Spring具有內置的異常轉換機制,因此JPA持久化提供者拋出的所有異常都會轉換為Spring的DataAccessException–對于所有帶有@Repository(或已配置)的Bean。
主要有四個組-
NonTransientDataAccessException-除非糾正異常原因,否則相同操作的重試將失敗。因此,如果您傳遞不存在的id,它將失敗,除非該id存在于數據庫中。
RecoverableDataAccessException–經過一些恢復步驟后,它們與前面的”相反”–可以恢復的異常–相反。更多詳情請查看API文檔
/li>
ScriptException-嘗試處理格式不正確的腳本時與SQL相關的異常。
TransientDataAccessException-這些是無需任何顯式步驟即可恢復的例外情況,例如,當數據庫超時時,您將在幾秒鐘后重試。
也就是說,查找有關所有異常的文檔的理想位置–在API本身–只需瀏覽DataAccessException的層次結構。
這篇關于Spring CrudRepository可以拋出什么運行異常?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,