アノテーションインターフェース 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
アノテーション、ライフサイクルアノテーション、クエリアノテーションを含めることができます。