繁体   English   中英

如何在 Spring 数据(JPA)派生查询中按多个属性排序?

[英]How to sort by multiple properties in Spring Data (JPA) derived queries?

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

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc

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

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

…OrderByProgDateAscStartTimeAsc

请注意,我们如何通过Asc得出第一个属性定义并继续处理下一个属性。

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

是的,它应该是可能的:

尝试这个:

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

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

我正在共享另一种用于实现 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));

更紧凑一点:

return repository.findAll(
  Sort.by(List.of(
    new Order(Sort.Direction.DESC, "StartTime"),
    new Order(Sort.Direction.ASC, "ProgDate")
  ))
);

或者

return repository.findAll(
  Sort
  .by(Direction.DESC, "StartTime")
    .and(Sort.by(Sort.Direction.ASC, "ProgDate"))
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM