Spring Data JPA Sort 对象中的复杂排序

问题描述

我想做这个查询

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);