web-dev-qa-db-ja.com

Spring CrudRepositoryの例外

DBのCRUD操作を処理するこのSpring Data CrudRepositoryがあります。

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

}
_

Userは、私のDBのユーザーテーブルのエンティティです。 CrudRepositoryは、以下の操作をリポジトリに追加します。

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

documentation で述べたように、削除操作と検索操作は、指定されたIDがnullの場合に保存操作が例外をスローしないときにIllegalArgumentExceptionをスローします。

問題は、CrudRepositoryのjavadocがこれらの操作によってスローされる他の例外について言及していないことです。たとえば、指定されたIDがDBに存在しない場合に、delete(String ID)操作がEmptyResultDataAccessExceptionをスローすることはわかりません。

save(User user)操作のjavadocでは、(一意のフィールドと外部キーで)1つのデータ整合性制約を破る新しいユーザーを挿入した場合にどの例外がスローされるかは明確ではありません。さらに、新しいユーザーを作成するか、既存のユーザーを作成するかについては警告しません。新しいユーザーを作成するか、既存のユーザーを上書きするだけです(したがって、Insert + Update操作です)。

エンタープライズアプリケーションでは、オペレーションがスローする可能性のあるすべてのスロー可能な例外をキャッチできる必要があり、オペレーションのjavadocでそれについて読む必要があります。

CrudRepositoryの例外に関する明確なドキュメントを知っていますか?

ありがとうございました

32
gvdm

Springには組み込みの例外変換メカニズムがあるため、JPA永続性プロバイダーによってスローされるすべての例外は、Springの DataAccessException -@Repositoryアノテーションが付けられた(または設定された)Beanに変換されます。

4つの主要なグループがあります-

  • NonTransientDataAccessException -これらは、例外の原因が修正されない限り、同じ操作の再試行が失敗する例外です。したがって、たとえば、存在しないIDを渡すと、そのIDがデータベースに存在しない限り失敗します。

  • RecoverableDataAccessException -これらは前の「反対」です-回復可能な例外-いくつかの回復手順の後。 APIドキュメントの詳細

  • ScriptException -整形式でないスクリプトを処理しようとした場合など、SQL関連の例外。

  • TransientDataAccessException -これらは、明示的なステップなしでリカバリが可能な場合の例外です。データベースにタイムアウトがある場合、数秒後に再試行しています。

とは言っても、すべての例外に関するドキュメントを見つける理想的な場所は、API自体の中です。 DataAccessException の階層を通過するだけです。

48
vtor