私がこれまでに知っているのは、FindByが複数の結果を返すことができる一方で、FindOneByが次の方法で使用すると単一の結果またはnullを返すことです。
List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);
今、私の質問は、この方法でfindByを使用できますか?
Department findByDepartmentId(Long Id);
そうであれば、
最後に、findOneByの代わりにfindByを使用するべきではないタイミングまたは理由は何ですか?
このように
findBy
を使用できますか?部門findByDepartmentId(Long Id)
;
はい、この構文はSpring JPAの観点から技術的に正しいです。 Spring JPAは、return typeも見てクエリで達成しようとしていることを推測しますが。
基本的に、これらは戻り型の場合です。
クエリで単一の値を返したい場合-_basic type
_、_Entity T
_、 _Optional<T>
_ 、 _CompletableFuture<T>
_ を指定できます=など.
tのコレクションを返したいクエリでは、 _List<T>
_ 、 _Stream<T>
_ 、 _Page<T>
_を指定できます。 、 _Slice<T>
_ など.
つまり、クエリ定義:
_Department findByDepartmentId(Long Id);
_
は、単一の結果を期待することを意味します(戻り値の型として_Entity T
_を指定したため)。これは、Spring JPAがクエリを実行する方法を反映します。 getSingleResult()
を呼び出します _javax.persistence.Query
_ インターフェースは、exception
複数のオブジェクトが基準を満たす場合。
findBydepartmentId
はどの基準で単一のレコードを返しますか?
そのIDを持つ単一のオブジェクトがあることに基づいて、それ以外の場合は例外をスローします。
findBy
の代わりにfindOneBy
を使用するべきではない場合と理由
これら2つの意味は異なり、互換性はありません。
findOneBy
は、常に getSingleResult()
が呼び出されます。
findBy
は、上記の定義に従って、戻り値の型に応じて異なる動作をします。
findOneByXX
は、値が1つだけであるか、値がないことを保証します。2つの値がある場合、例外がスローされます。
ただし、findByXX
はこの一意性のチェックを行いません。