我有一个带有finder的简单JpaRepository,它返回由名为" number"的属性排序的记录。按降序排列。 "数字" property也是我实体的@Id。这很好用,但是有成千上万的记录,所以我想返回一个Page而不是List。
@Repository
public interface ReceiptRepository extends JpaRepository<Receipt, BigDecimal> {
@Query
public List<Receipt> findByStorerOrderByNumberDesc(String storer);
}
如果我将取景器更改为以下内容,则排序不再有效。我尝试过使用Pageable参数的排序功能,但它没有用。同时删除了OrderByNumberDesc,但结果相同。
@Repository
public interface ReceiptRepository extends JpaRepository<Receipt, BigDecimal> {
@Query
public Page<Receipt> findByStorerOrderByNumberDesc(String storer, Pageable pageable);
}
编辑 - 添加控制器方法
以下是我的控制器方法。
@RequestMapping(method = RequestMethod.GET, produces = {"application/json"})
public PagedResources<Receipt> receipts(Pageable pageable, PagedResourcesAssembler assembler) {
Page<Receipt> receipts = receiptRepository.findByStorer("003845", pageable);
return assembler.toResource(receipts, receiptResourceAssembler);
}
我觉得我在这里遗漏了一些非常基本的东西。
我使用的是Spring Data JPA 1.5.2和Commons 1.7.2。
谢谢:)
答案 0 :(得分:5)
在您的Pageable创建时将其添加到Pageable:
e.g。
Pageable pageable ...;
pageable.getSort().and(new Sort(Direction.ASC, "prop1", "prop1"));
或者在Spring MVC中你可以这样做:
@RequestMapping(method = RequestMethod.GET, produces = {"application/json"})
public PagedResources<Receipt> receipts(@PageableDefaults(sort = { "x",
"y", "z" }, value = 10)Pageable pageable, PagedResourcesAssembler assembler) {
Page<Receipt> receipts = receiptRepository.findByStorer("003845", pageable);
return assembler.toResource(receipts, receiptResourceAssembler);
}