问题描述
我想做这个查询
select * from order_config
where group_id like '%PATH%'
order by (group_id = 'PATH') desc
我有这个 JpaRepository,我想通过这个复杂的排序传递一个 Pageable
对象
val sort = Sort.by(Sort.Direction.DESC,"group_id")
val pageable = PageRequest.of(pageNumber,pageSize,sort)
this.findAll(pageable)
我已经试过了,但是没有用
val sort = JpaSort.unsafe(Sort.Direction.DESC,"(group_id = 'PATH')")
val pageable = PageRequest.of(pageNumber,sort)
this.findAll(pageable)
如何使用此表达式而不是模型属性构建此 Sort
对象?
解决方法
您可以使用规范 API 来生成更复杂的查询。我我的代码我用这段代码来创建规范对象。
// Instead of Post class pass your own entity class.
public static Specification<Post> search(String keyword) {
return ((root,criteriaQuery,criteriaBuilder) -> {
if (keyword == null) {
return null;
}
return criteriaBuilder.like(root.get("title"),"%" + keyword + "%"));
});
}
findAll() 也接受规范对象,您可以同时传递规范和可分页对象,例如:
this.findAll(search("PATH"),pageable);