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();
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
etdelete
et un mot cléBy
final. Tout ce que vous mettez entrefind
etBy
rend le nom de votre méthode plus expressif et n'affecte pas la dérivation des requêtes.