簡體   English   中英

Spring CrudRepository 異常

[英]Spring CrudRepository exceptions

我有這個 Spring Data CrudRepository ,它處理數據庫上的 CRUD 操作。

@Repository
public interface IUserRepository extends CrudRepository<User, String> {

}

User是我的數據庫的用戶表的實體。 CrudRepository向存儲庫添加了以下操作:

  • delete(String ID)
  • findOne(String ID)
  • save(User user)

文檔中所述,刪除和查找操作會拋出IllegalArgumentException ,以防給定的 id 為 null,而保存操作不會拋出任何異常。

問題是 CrudRepository 的 javadoc 沒有提到這些操作引發的其他異常。 例如,它不會告訴delete(String ID)操作拋出EmptyResultDataAccessException以防提供的 ID 在數據庫中不存在。

save(User user)操作的 javadoc 中,如果您插入一個破壞一個數據完整性約束(在唯一字段和外鍵上)的新用戶,則不清楚拋出哪些異常。 此外,它不會警告您是否正在編寫新用戶或現有用戶:它只會創建一個新用戶或在存在時覆蓋(因此它是插入 + 更新操作)。

在企業應用程序中,我應該能夠捕獲操作可能拋出的每個可拋出異常,我應該在操作的 javadoc 中閱讀相關內容。

你知道關於CrudRepository異常的任何明確的文檔嗎?

Spring具有內置的異常轉換機制,因此JPA持久性提供程序拋出的所有異常都轉換為Spring的DataAccessException - 對於使用@Repository(或已配置)注釋的所有bean。

有四個主要群體 -

  • NonTransientDataAccessException - 除非糾正異常的原因,否則這些異常會導致相同操作的重試失敗。 因此,如果您傳遞非現有ID,它將失敗,除非數據庫中存在該ID。

  • RecoverableDataAccessException - 這些是前一個的“反面” - 可恢復的異常 - 在一些恢復步驟之后。 API文檔中的更多詳細信息

  • ScriptException - 與SQL相關的異常,例如在嘗試處理格式不正確的腳本時。

  • TransientDataAccessException - 這些是在沒有任何顯式步驟的情況下進行恢復時的異常,例如,當數據庫超時時,您將在幾秒鍾后重試。

也就是說,找到有關所有異常的文檔的理想位置 - 在API本身 - 只需要遍歷DataAccessException的層次結構。

我捕獲了父異常 DataAccessException。

import org.springframework.dao.DataAccessException;

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM