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