我是否可以将@Query定义与Spring Data JPA存储库方法中的规范相结合?

2022-08-31 23:40:18

是否可以在一个存储库方法中同时使用注释和规范?例如,我希望有一个这样的方法:@Query

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

是否可以,或者我应该将整个查询构建为 a 并删除注释?Predicate@Query


答案 1

首先,您应该阅读这篇春季博客文章

其次,根据 JpaSpecificationExecutor 接口,您的存储库应该实现,以下方法采用一个参数:Specification

  • 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)

因此,不能将定义与 .@QuerySpecification

但是,由于您可以使用 a 来表示条件,并且因为您可以根据需要组合任意数量的规范,因此可以仅使用 (s) 重写整个规范。firstName <> ?1Specification@QuerySpecification


答案 2

推荐