web-dev-qa-db-ja.com

findBy / findAllByのSpring Data JPAの違い

Spring Data JPAキーワードを使用する場合、次の間に違いはありますか?

List<SomeEntity> findBySomeCondition();

そして

List<SomeEntity> findAllBySomeCondition();
40
Nikita

いいえ、それらの間に違いはありません。それらはまったく同じクエリを実行します。メソッド名からクエリを導出するとき、Spring DataはAll部分を無視します。唯一の重要なビットはByキーワードで、それに続くものはすべてフィールド名として扱われます(ただし、OrderByなどの他のキーワードは例外的にfindAllByOrderByIdAsc)。

これは、次のようなものが完全に有効であることを意味します。

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();

そして、次とまったく同じSQLクエリを実行します。

List<SomeEntity> findBySomeCondition();

または

List<SomeEntity> findAllBySomeCondition();

更新:ドキュメントでこの動作の公式の説明を見たことはありませんでしたが、今後の 最近のブログ投稿 Spring Data(Kay)の2.0リリースが説明されました:

Spring Dataのメソッド解析では、findexistscount、およびdeleteなどのプレフィックスキーワードと、終了するByキーワードを使用します。 findByの間に置くものはすべて、メソッド名をより表現力豊かにし、クエリの派生には影響しません。

71
Robert Hunt