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

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

是否可以或应该将整个查询构建为Predicate并删除@Query批注?

最佳答案

首先,您应该阅读此Spring blog post
其次,根据您的存储库应实现的 JpaSpecificationExecutor 接口(interface),以下方法采用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)

  • 因此,您不能将@Query定义与Specification混合使用。
    但是,由于您可以使用firstName <> ?1表示Specification条件,并且由于您可以组合任意数量的规范,因此只能使用@Query重写整个Specification

    07-24 09:34