アノテーションインターフェース Find
エンティティを返すリポジトリメソッドに、パラメーターベースの自動クエリメソッドとしてアノテーションを付けます。
Find アノテーションは、アノテーションが付けられたリポジトリメソッドが、そのパラメーターとそのパラメーターに割り当てられた引数に基づいてエンティティを取得するクエリを実行することを示します。メソッドの戻り値の型は、クエリによって返されるエンティティの型を識別します。アノテーションが付けられたメソッドの各パラメーターは、次のいずれかである必要があります。
- エンティティクラスの永続フィールドまたはプロパティとまったく同じ型と名前(Java ソースのパラメーター名、または
@Byによって割り当てられた名前)を持つ、または - 型は
Limit、Sort、Order、またはPageRequestです。
クエリは、エンティティの永続フィールドに一致するメソッドパラメーターから推測されます。
@Find でアノテーションが付けられたメソッドには特定の命名規則はありません。これらのメソッドは任意に命名することができ、その名前には Jakarta Data 仕様で定義された意味は含まれません。
例: ガレージを表すインターフェースを考えてみましょう:
@Repository
interface Garage {
@Find
List<Car> getCarsWithModel(@By("model") String model);
}
@Find アノテーションは、getCarsWithModel(model) メソッドが model フィールドに指定された値を持つ Car インスタンスを取得することを示します。
@Find アノテーションが付けられたメソッドは、次のいずれかの型を返す必要があります。
- エンティティ型
E、メソッドが単一のインスタンスを返す場合 Optional<E>、メソッドが最大で 1 つのインスタンスを返す場合- エンティティ配列型
E[] List<E>,Stream<E>、またはPage<E>またはCursoredPage<E>。
Find というアノテーションが付けられた自動クエリメソッドは、パラメーターベースの条件を満たすすべてのレコードのエンティティインスタンスを返します。
- アノテーション付きメソッドの戻り値の型が
EまたはOptional<E>であり、複数のレコードがクエリ条件を満たす場合、メソッドはNonUniqueResultExceptionをスローする必要があります。 - アノテーション付きメソッドの戻り値の型が
Eであり、クエリ条件を満たすレコードがない場合、メソッドはEmptyResultExceptionをスローする必要があります。
@Find、@Query、@Insert、@Update、@Delete、@Save などのアノテーションは相互に排他的です。リポジトリインターフェースの特定のメソッドには、最大で 1 つの @Find アノテーション、ライフサイクルアノテーション、クエリアノテーションを含めることができます。