web-dev-qa-db-fra.com

Différence Spring Data JPA entre findBy / findAllBy

Y a-t-il une différence lors de l'utilisation des mots clés Spring Data JPA entre:

List<SomeEntity> findBySomeCondition();

et

List<SomeEntity> findAllBySomeCondition();
40
Nikita

Non, il n'y a aucune différence entre eux, ils exécuteront exactement la même requête, la partie All est ignorée par Spring Data lors de la dérivation de la requête à partir du nom de la méthode. Le seul bit important est le mot clé By, tout ce qui le suit est traité comme un nom de champ (à l'exception d'autres mots clés comme OrderBy qui, accessoirement, peuvent conduire à des noms de méthode étranges comme findAllByOrderByIdAsc).

Cela signifie que quelque chose comme ça est parfaitement valide:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();

Et exécutera exactement la même requête SQL que:

List<SomeEntity> findBySomeCondition();

ou

List<SomeEntity> findAllBySomeCondition();

Mise à jour: Je n'avais jamais vu de description officielle de ce comportement dans la documentation mais dans un article de blog récent sur le prochain Version 2.0 de Spring Data (Kay), il a été expliqué:

L'analyse des méthodes de Spring Data utilise des mots-clés préfixes tels que find, exists, count et delete et un mot clé By final. Tout ce que vous mettez entre find et By rend le nom de votre méthode plus expressif et n'affecte pas la dérivation des requêtes.

71
Robert Hunt