是否可以在一种存储库方法中同时使用@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
。