Могу ли я объединить определение и спецификации @Query в одном методе репозитория данных JPA Spring?

Можно ли использовать аннотация и спецификацию @Query в одном методе репозитория? Например, я хотел бы иметь такой метод:

@Query(value="SELECT e from EMPLOYEE where firstName <> ?1")
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp);

Возможно ли, или я должен построить весь запрос как Predicate и удалить аннотацию @Query?

Ответ 1

Сначала вы можете прочитать этот блог. Во-вторых, в соответствии с интерфейсом JpaSpecificationExecutor, который должны реализовывать ваши репозитории, вы можете выполнить следующие запросы, используя Спецификации:

  • count(Specification<T> spec)
  • List<T> findAll(Specification<T> spec)
  • Page<T> findAll(Specification<T> spec, Pageable pageable)
  • List<T> findAll(Specification<T> spec, Sort sort)
  • T findOne(Specification<T> spec)

Поэтому вам не нужно смешивать @Query (или методы запросов) и Specification.

Вы можете выразить это условие:

firstName <> ?1

вместо этого используйте Specification. Затем вы можете объединить столько спецификаций, сколько захотите.