2017-08-31 31 views
5

私が今まで知っているのは、FindOneByは複数の結果を返すことができますが、FindOneByは単一の結果を返します。SpringデータのfindByとfindOneByの違いJPA

List<Department> findByDepartmentName(String name); 
Department findOneByDepartmentId(Long Id); 

今、私の質問は、この方法でfindByを使用できますか?

Department findByDepartmentId(Long Id); 

YESの場合、

  • は、指定されたIDに対して複数のレコードがあると仮定します。
  • どのような基準でfindBydepartmentIdは単一のレコードを返しますか?

最後に、findOneByの代わりにfindByを使用しない場合、またはいつ使用する必要がありますか?

+0

私は同じ質問をしています、あなたはこれの底にいらっしゃいましたか? – Doug

答えて

0

このようにfindByを使用できますか?部門findByDepartmentId(ロングId);

はい、この構文は、Spring JPAの観点からは技術的に正確です。 Spring JPAはあなたのクエリで達成しようとしていることを、戻り値の型を見ても推測していますが。

基本的にこれらは、戻り値の型のための例です:

  • クエリを使用すると、単一の値を返すようにしたい - あなたは基本型、Entity TOptional<T>を指定することができ、CompletableFuture<T>など

  • でTのコレクションを返すクエリ - あなたはList<T>Stream<T>Page<T>Slice<T>などを指定できます。

は言われていること、あなたのクエリ定義は:

Department findByDepartmentId(Long Id); 

(あなたが戻り値の型として、単一のエンティティを指定したので)あなたが単一の結果を期待することを意味します。これは、Spring JPAがクエリを実行する方法を反映します。javax.persistence.QueryインターフェイスでgetSingleResult()を呼び出します。複数のオブジェクトが条件を満たしている場合は、exceptionがスローされます。

findBydepartmentIdはどのような基準で1つのレコードを返しますか?

このIDを持つオブジェクトが1つあることを前提にして、それ以外の場合は例外がスローされます。

findOneByの代わりにfindByを使用しないのはなぜですか?

これらの2つの意味は異なり、互換性がありません。

findOneByは、常にgetSingleResult()が呼び出される結果になります。

findByは、上記の定義に従って戻り値の型によって異なる動作をします。

0

findOneByXXは2つの値がある場合、例外がスローされることを保証します。しかし、findByXXはこの一意性のチェックを行いません。

関連する問題