[英]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。 在上面的示例中, ProgDate
和StartTime
将是两个单独的值。
诀窍是使用方向关键字Asc
和Desc
简单地分隔要排序的属性。 所以你可能想要在你的查询方法中是这样的:
…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.