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の例外に関する明確なドキュメントを知っていますか?
ありがとうございました
Springには組み込みの例外変換メカニズムがあるため、JPA永続性プロバイダーによってスローされるすべての例外は、Springの DataAccessException -@Repositoryアノテーションが付けられた(または設定された)Beanに変換されます。
4つの主要なグループがあります-
NonTransientDataAccessException -これらは、例外の原因が修正されない限り、同じ操作の再試行が失敗する例外です。したがって、たとえば、存在しないIDを渡すと、そのIDがデータベースに存在しない限り失敗します。
RecoverableDataAccessException -これらは前の「反対」です-回復可能な例外-いくつかの回復手順の後。 APIドキュメントの詳細
ScriptException -整形式でないスクリプトを処理しようとした場合など、SQL関連の例外。
TransientDataAccessException -これらは、明示的なステップなしでリカバリが可能な場合の例外です。データベースにタイムアウトがある場合、数秒後に再試行しています。
とは言っても、すべての例外に関するドキュメントを見つける理想的な場所は、API自体の中です。 DataAccessException の階層を通過するだけです。