我正在查看关于方法命名的关于此页面(http://docs.spring.io/spring-data/jpa/docs/current/reference/html/jpa.repositories.html)的示例,是否可以创建复杂的链方法名称,例如
findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc
在他们提供的示例中,他们只在一个值上执行OrderBy。在上面的示例中,ProgDate
和StartTime
将是两个单独的值。
答案 0 :(得分:91)
诀窍是使用方向关键字Asc
和Desc
来简单地界定要排序的属性。所以你在查询方法中可能想要的是:
…OrderByProgDateAscStartTimeAsc
请注意,我们如何通过Asc
结束第一个属性定义并继续使用下一个属性。
一般来说,一旦方法名称超过一定的长度或复杂度,我们建议您切换到基于@Query
的查询。主要原因是客户称这些非常长的方法很尴尬。使用@Query
,您可以获得查询语言的全部功能以及可能具有更高级语言的合理大小的方法名称来表达查询的意图。
答案 1 :(得分:6)
是的,应该可以:
试试这个:
findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc(String programme, String director, Date progStart, Date progEnd);
我没有测试过代码,但根据我已经完成的事情,它应该可以运行。
答案 2 :(得分:3)
我正在分享另一种实现 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));