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

PDS*_*tat 46 java spring jpa spring-data spring-data-jpa

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

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc
Run Code Online (Sandbox Code Playgroud)

在他们给出的示例中,他们只在一个值上执行OrderBy.在上面的示例中ProgDate,StartTime将是两个单独的值.

Oli*_*ohm 113

诀窍是通过使用方向关键字Asc和简单地界定要排序的属性Desc.那么您在查询方法中可能需要的是:

…OrderByProgDateAscStartTimeAsc
Run Code Online (Sandbox Code Playgroud)

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

一般来说@Query,一旦方法名称超过一定长度或复杂度,我们建议切换到基于查询.主要原因是客户称这些非常长的方法很尴尬.有了@Query你而得到的查询语言的强大功能加上,可能是更高级的语言来表达查询意图合理大小的方法名.


小智 13

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

        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));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这就是我一直在寻找的。 (2认同)

Pau*_*lgo 6

是的,它应该是可能的:

试试这个:

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc(String programme, String director, Date progStart, Date progEnd);
Run Code Online (Sandbox Code Playgroud)

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