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