2016-05-16 2 views

ответ

15

Нет, нет никакой разницы между ними, они будут выполнять точно такой же запрос, All части игнорируются Spring Data при выводе запрос из имени метода. Единственным важным битом является ключевое слово By, все последующее его обрабатывается как имя поля (за исключением других ключевых слов, таких как OrderBy, что, в свою очередь, может привести к некоторым странным типам имен методов, таких как findAllByOrderByIdAsc).

Это означает что-то вроде этого вполне допустимо:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition(); 

И будет выполнять точно такой же SQL запрос как:

List<SomeEntity> findBySomeCondition(); 

или

List<SomeEntity> findAllBySomeCondition(); 

Update: I Никогда не видел официального описания этого поведения iour в документации, но в recent blog post о предстоящем выпуске Spring Data (Kay) 2.0 было объяснено:

метод синтаксического анализа Spring Data использует префикс ключевые слова, как find, exists, count и delete и завершающего By ключевое слово , Все, что вы установили между find и By, делает ваше имя метода более выразительным и не влияет на вывод запроса.

+0

Спасибо за описание – Nikita

0

метод findBy используется, если мы хотим, чтобы найти по имени или некоторые другие критерии, такие как findByFirstName(String firstName);

findВсе методы обычно обнаруживаются путем предоставления спецификации

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

Пожалуйста, смотрите документацию ниже для большей ясности:

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

+0

Нет, этот метод, который вы написали, принадлежит JPASpecificationExecutor. Я говорю только о JpaRepository. Я могу создать метод findAllByFirstName (String firstName), и он будет работать аналогично findByFirstName. В этом вопросе я пытаюсь понять разницу между ними. – Nikita