web-dev-qa-db-ja.com

@Queryの定義と仕様を1つのSpring Data JPAリポジトリメソッドで組み合わせることができますか?

@Queryアノテーションと仕様の両方を1つのリポジトリメソッドで使用することは可能ですか?たとえば、次のようなメソッドが必要です。

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

クエリ全体をPredicateとして作成し、@Queryアノテーションを削除することは可能ですか?

22
woytech

まずこれを読みたいかもしれません ブログ投稿 最初に。次に、リポジトリが実装する必要がある 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(またはquery-methods)およびSpecifications。

この状態を表すことができます:

firstName <> ?1

代わりにSpecificationを使用します。その後、必要な数の仕様を組み合わせることができます。

19
Vlad Mihalcea