Spring Data JPA-Unterschied zwischen findBy / findAllBy


73

Gibt es einen Unterschied bei der Verwendung von Spring Data JPA-Schlüsselwörtern zwischen:

List<SomeEntity> findBySomeCondition();

und

List<SomeEntity> findAllBySomeCondition();

Antworten:


132

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) und Bywird als beschreibend angesehen, es sei denn, Sie verwenden eines der ergebnisbeschränkenden Schlüsselwörter, z. B. a Distinct, um ein eindeutiges Flag für die zu erstellende Abfrage zu setzen oder Top/ oder Firstum 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, und deleteund ein Abschluss ByStichwort. Alles, was Sie dazwischen legen findund ByIhren Methodennamen aussagekräftiger machen und die Ableitung von Abfragen nicht beeinflussen.


Vielen Dank für die Beschreibung
Nikita

Vielen Dank, dass Sie die OrderBy-Definition angegeben haben und zeigen, dass das By vor dem OrderBy erforderlich ist
Sylvester

Gibt es irgendwo eine VOLLSTÄNDIGE Dokumentation zur Erstellung von Abfragen (einschließlich Änderungen)? Ich kann nur Fragmente finden (zB docs.spring.io/spring-data/jpa/docs/current/reference/html/… - kein Wort über ..all .., entfernen ..)
Ekaterina

Warum ist es dann überhaupt dort?
Evghenii Orenciuc

Ich kann nicht das Präfix Name Verhalten in der Dokumentation entweder definiert finden, aber es gibt eine Sache , die wird das Verhalten ändern , wenn in dem Präfix enthalten: der Begriff „Distinct“, zB " findDistinctBySomeCondition(): . 4.4.2 Query - Erstellung
M. Justin

0

Ein Unterschied besteht darin, dass mit findAllBy Hibernate-Filter (@Filters from org.hibernate.annotations) angewendet werden und somit eine andere SQL.


-3

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


Nein, diese Methode, die Sie geschrieben haben, stammt von JPASpecificationExecutor. Ich spreche nur von JpaRepository. Ich kann die Methode findAllByFirstName (String firstName) erstellen und sie funktioniert ähnlich wie findByFirstName. In dieser Frage versuche ich, den Unterschied zwischen ihnen zu verstehen.
Nikita
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.