如何在Spring Data(JPA)派生的查询中按多个属性进行排序?

时间:2014-08-19 10:21:35

标签: java spring jpa spring-data spring-data-jpa

我正在查看关于方法命名的关于此页面(http://docs.spring.io/spring-data/jpa/docs/current/reference/html/jpa.repositories.html)的示例,是否可以创建复杂的链方法名称,例如

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc

在他们提供的示例中,他们只在一个值上执行OrderBy。在上面的示例中,ProgDateStartTime将是两个单独的值。

3 个答案:

答案 0 :(得分:91)

诀窍是使用方向关键字AscDesc来简单地界定要排序的属性。所以你在查询方法中可能想要的是:

…OrderByProgDateAscStartTimeAsc

请注意,我们如何通过Asc结束第一个属性定义并继续使用下一个属性。

一般来说,一旦方法名称超过一定的长度或复杂度,我们建议您切换到基于@Query的查询。主要原因是客户称这些非常长的方法很尴尬。使用@Query,您可以获得查询语言的全部功能以及可能具有更高级语言的合理大小的方法名称来表达查询的意图。

答案 1 :(得分:6)

是的,应该可以:

试试这个:

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc(String programme, String director, Date progStart, Date progEnd);

我没有测试过代码,但根据我已经完成的事情,它应该可以运行。

答案 2 :(得分:3)

我正在分享另一种实现 get 操作的方法代码片段,其中执行按多列排序的排序操作

        List<Order> orders = new ArrayList<Order>();

        Order StartTimeOrder = new Order(Sort.Direction.DESC, "StartTime");
        orders.add(StartTimeOrder);
        Order progDateOrder = new Order(Sort.Direction.ASC, "ProgDate");
        orders.add(progDateOrder);
        return repository.findAll(Sort.by(orders));