是否可以@Query在一种存储库方法中同时使用注释和规范?例如,我想要一个这样的方法:
@Query
@Query(value="SELECT e from EMPLOYEE where firstName <> ?1") public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp);
是否可以或应该将整个查询构建为a Predicate并删除@Query注释?
Predicate
首先,您可能想阅读此博客文章。其次,根据JpaSpecificationExecutor存储库应实现的接口,可以使用“规范”运行以下查询:
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(或查询方法)和Specifications。
Specification
您可以表达这种情况:
firstName <> ?1
使用一个Specification代替。然后,您可以根据需要组合任意多个规格。