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

f0ofjuux  于 2022-11-10  发布在  Spring
关注(0)|答案(4)|浏览(142)

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

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc

在给予的例子中,ProgDateStartTime是两个独立的值。

mpgws1up

mpgws1up1#

诀窍是使用方向关键字AscDesc来分隔要排序的属性。

…OrderByProgDateAscStartTimeAsc

请注意,我们如何通过Asc来结束第一个属性定义,并继续处理下一个属性。
一般来说,当方法名超过一定的长度或复杂度时,我们建议转换为基于@Query的查询。主要原因是客户端调用这些非常长的方法很尴尬。使用@Query,您可以获得查询语言的全部功能,加上一个合理大小的方法名,该方法名可能是更高级的语言来表达查询的意图。

eyh26e7m

eyh26e7m2#

我正在分享另一种实现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));
jc3wubiy

jc3wubiy3#

是的这是应该可能的:
试试看:

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

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

rqmkfv5c

rqmkfv5c4#

更紧凑一点:

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"))
);

相关问题