Gibt es einen Unterschied bei der Verwendung von Spring Data JPA-Schlüsselwörtern zwischen:
List<SomeEntity> findBySomeCondition();
und
List<SomeEntity> findAllBySomeCondition();
Antworten:
Nein, es gibt keinen Unterschied zwischen ihnen. Sie führen genau dieselbe Abfrage aus. Der All
Teil wird von Spring Data ignoriert, wenn die Abfrage aus dem Methodennamen abgeleitet wird. Das einzig wichtige Bit ist das By
Schlüsselwort. Alles, was darauf folgt, wird als Feldname behandelt (mit Ausnahme anderer Schlüsselwörter, OrderBy
die im Übrigen zu seltsam aussehenden Methodennamen führen können findAllByOrderByIdAsc
).
Dies bedeutet, dass so etwas vollkommen gültig ist:
List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();
Und führt genau die gleiche SQL-Abfrage aus wie:
List<SomeEntity> findBySomeCondition();
oder
List<SomeEntity> findAllBySomeCondition();
In der Dokumentation zur Version 2.3.6 von Spring Data wird diese Funktion erläutert:
Jeder Text zwischen
find
(oder anderen einführenden Schlüsselwörtern) undBy
wird als beschreibend angesehen, es sei denn, Sie verwenden eines der ergebnisbeschränkenden Schlüsselwörter, z. B. aDistinct
, um ein eindeutiges Flag für die zu erstellende Abfrage zu setzen oderTop
/ oderFirst
um die Abfrageergebnisse einzuschränken.
Der Zweck der Funktion wurde in einem Blogbeitrag über die bevorstehende Version 2.0 von Spring Data erläutert :
Spring Data Methode Parsen Anwendungen Präfix Schlüsselwörter wie
find
,exists
,count
, unddelete
und ein AbschlussBy
Stichwort. Alles, was Sie dazwischen legenfind
undBy
Ihren Methodennamen aussagekräftiger machen und die Ableitung von Abfragen nicht beeinflussen.
findDistinctBySomeCondition()
: . 4.4.2 Query - Erstellung
Die findBy-Methode wird verwendet, wenn wir nach Namen oder anderen Kriterien wie suchen möchten findByFirstName(String firstName);
findAll-Methoden finden im Allgemeinen durch Angabe einer Spezifikation
List<T> findAll(Specification<T> spec);
Weitere Informationen finden Sie in den folgenden Dokumenten:
http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html