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

新手上路,请多包涵

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

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc

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

原文由 PDStat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

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

 …OrderByProgDateAscStartTimeAsc

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

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

原文由 Oliver Drotbohm 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在分享另一种方法代码片段,用于实现 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));

原文由 abhinav kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题