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 AllTeil wird von Spring Data ignoriert, wenn die Abfrage aus dem Methodennamen abgeleitet wird. Das einzig wichtige Bit ist das BySchlüsselwort. Alles, was darauf folgt, wird als Feldname behandelt (mit Ausnahme anderer Schlüsselwörter, OrderBydie 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) undBywird 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/ oderFirstum 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, unddeleteund ein AbschlussByStichwort. Alles, was Sie dazwischen legenfindundByIhren 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