パッケージ jakarta.data.repository

アノテーションインターフェース Insert


挿入操作を実行するリポジトリメソッドのライフサイクルアノテーション。

Insert アノテーションは、アノテーション付きリポジトリメソッドが 1 つ以上のエンティティの状態をデータベースに追加することを示します。

Insert メソッドは、エンティティクラスのインスタンスを 1 つ以上受け入れます。メソッドには、次のいずれかの型のパラメーターが 1 つだけ必要です。

  • 挿入するエンティティのクラス、または
  • List<E> または E[]。ここで、E は挿入するエンティティのクラスです。

アノテーションが付けられたメソッドは、void として宣言されるか、そのパラメーターの型と同じ戻り値の型を持つ必要があります。

すべての Jakarta Data プロバイダーは、このシグネチャーに準拠する Insert メソッドを受け入れる必要があります。他のシグネチャーを持つメソッドへの Insert アノテーションの適用は、Jakarta Data プロバイダー間で移植できません。

たとえば、メソッドに @Insert のアノテーションが付けられ、Car car 型のパラメーターを取る場合、戻り値の型は Car になります。同様に、パラメーターが Iterable<Car> 型の場合、戻り値の型は Iterable<Car> になります。ガレージを表すインターフェースを考えてみましょう。

 @Repository
 interface Garage {
     @Insert
     Car park(Car car);
 }
 

アノテーション付きメソッドが非 void の場合、引数として渡されたエンティティインスタンスごとに挿入されたエンティティインスタンスを返す必要があります。アノテーション付きメソッドによって返されるインスタンスには、データベースに書き込まれたすべての値 (すべての自動生成された識別子、初期バージョン、挿入の結果として変更されたその他の値を含む) が含まれている必要があります。Iterable または配列の戻り値内のエンティティの順序は、引数内のエンティティの位置と一致する必要があります。アノテーション付きメソッドが戻った後、引数として指定された元のエンティティインスタンスは、挿入された状態を正確に反映していない可能性があります。

アノテーション付きメソッドが呼び出されたときに、指定された型の同じ一意の識別子を持つエンティティがデータベース内にすでに存在し、データベースが ACID (アトミック、一貫性、分離性、永続性) トランザクションを使用している場合、アノテーション付きメソッドは EntityExistsException を発生させる必要があります。データベースが BASE モデルに従う場合、またはデータを書き込むために追加モデルを使用する場合、この例外はスローされません。

@Find@Query@Insert@Update@Delete@Save などのアノテーションは相互に排他的です。リポジトリインターフェースの特定のメソッドには、最大で 1 つの @Find アノテーション、ライフサイクルアノテーション、クエリアノテーションを含めることができます。