Подтвердить что ты не робот

Spring Разница данных JPA между findBy/findAllBy

Есть ли разница при использовании Spring ключевых слов данных JPA между:

List<SomeEntity> findBySomeCondition();

и

List<SomeEntity> findAllBySomeCondition();
4b9b3361

Ответ 1

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

Это означает, что это действительно так:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();

И выполнит точно такой же SQL-запрос, как:

List<SomeEntity> findBySomeCondition();

или

List<SomeEntity> findAllBySomeCondition();

Обновление: Я никогда не видел официального описания этого поведения в документации, но в недавнем сообщении в блоге о предстоящей версии 2.0 Spring Data (Kay) было объяснено:

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

Ответ 2

Метод 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