是否可以在一个仓库方法中同时使用@Query
注解和规范?例如,我希望有这样一个方法:
@Query(value="SELECT e from EMPLOYEE where firstName <> ?1")
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp);
是否可以或者应该将整个查询构建为Predicate
并删除@Query
注解?
2条答案
按热度按时间0pizxfdo1#
第一件事,你应该读这个Spring blog post。
其次,根据仓库应该实现的
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)
因此,不能将
@Query
定义与Specification
混合使用。但是,由于可以使用
Specification
来表示firstName <> ?1
条件,并且可以根据需要合并任意多个规范,因此可以仅使用Specification
来重写整个@Query
。h7wcgrx32#
我这样做是为了使用我的规范获得实体类型以外的响应,也许它可以帮助您在没有@Query的情况下解决您的需求: