2016-05-16 11 views

Antwort

15

Nein, es gibt keinen Unterschied zwischen ihnen, werden sie ausführen genau die gleiche Abfrage, der All Teil von Spring Data ignoriert, wenn die Ableitung Abfrage vom Methodennamen. Das einzige wichtige Bit ist das Schlüsselwort By, alles, was darauf folgt, wird als Feldname behandelt (mit Ausnahme von anderen Schlüsselwörtern wie OrderBy, was übrigens zu merkwürdig aussehenden Methodennamen wie findAllByOrderByIdAsc führen kann).

Das bedeutet in etwa so perfekt gültig ist:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition(); 

Und ausführen wird genau die gleiche SQL-Abfrage wie:

List<SomeEntity> findBySomeCondition(); 

oder

List<SomeEntity> findAllBySomeCondition(); 

Update: I Ich habe noch nie eine offizielle Beschreibung dieses Verhaltens gesehen iour in der Dokumentation, sondern in einem recent blog post über die bevorstehende Version 2.0 von Spring Data (Kay) erklärt wurde:

Spring Data Methode Parsing verwendet Präfix Schlüsselwörter wie find, exists, count und delete und einen Abschluss By Stichwort . Alles, was Sie zwischen find und By eingeben, macht Ihren Methodennamen aussagekräftiger und wirkt sich nicht auf die Abfrageableitung aus.

+0

Danke für die Beschreibung – Nikita

0

findBy Methode wird verwendet, wenn wir nach Namen suchen wollen oder einige andere Kriterien wie findByFirstName(String firstName);

findAll Methoden im Allgemeinen findet durch Angabe der Spezifikation

List<T> findAll(Specification<T> spec); 

Bitte siehe docs unten für mehr Klarheit:

http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html

+0

Nein, diese Methode, die Sie geschrieben haben, stammt aus JPASpecificationExecutor. Ich spreche nur über JpaRepository. Ich kann Methode findAllByFirstName (String firstName) erstellen und es funktioniert ähnlich wie findByFirstName. In dieser Frage versuche ich den Unterschied zwischen ihnen zu verstehen. – Nikita