我正在使用Spring Data JPA和Spring Data REST,并且已经为我的Thing
实体创建了一个JpaRepository。
@Repository
public interface ThingRepository extends JpaRepository<Thing, Long> {
@RestResource(path = "findByName", rel = "findByName")
Page findByName(@Param("name") String name, Pageable page);
}
我要应用排序。我要基于自定义分级算法对Thing
列表进行排序。
List<Thing> sortByRating(List<Thing> things){
// custom logic
return things;
};
如果可能的话,我想使用一个自定义函数来对结果进行排序。在Spring JPA中,处理这种事情的最佳方法是什么?我如何让我的仓库使用我的函数来对结果集进行排序?
2条答案
按热度按时间dsekswqp1#
您可以自定义对象页面(可分页)。如果您获取请求的数据:
之前的SQL:
之后的SQL:
4dc9hkyq2#
Spring Data提供基本的排序,如here所示,您也可以使用
@Query
和order by
来注解查询,但我相信您需要的是更复杂的排序逻辑。如果你正在使用Java 8,你可以使用它的特性来排序你的列表,this文章给出了很好的例子,它需要更多的工作,但似乎是你所追求的。注意,为了从
stream
转换到list
,你必须在stream
的末尾包括.collect(Collectors.toList());
。示例(摘自文章):
Edit:我没有注意到您使用了分页。我也遇到过类似的问题,在返回
Page
对象之前,我必须对页面内容做一些处理,所以我最终创建了PageImpl<T>
类的扩展:这里最重要的是
setContent
方法,它不存在于基类中。你可以将它与排序方法一起使用: