Есть ли разница при использовании Spring ключевых слов данных JPA между:
List<SomeEntity> findBySomeCondition();
и
List<SomeEntity> findAllBySomeCondition();
Есть ли разница при использовании Spring ключевых слов данных JPA между:
List<SomeEntity> findBySomeCondition();
и
List<SomeEntity> findAllBySomeCondition();
Нет, между ними нет никакой разницы, они будут выполнять точно такой же запрос, часть 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
, делает ваше имя метода более выразительным и не влияет на вывод запроса.
Метод 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