如何使用 Spring 数据 REST 在 pagingAndSorting 存储库接口中反转 findAll() 查询

csc*_*ch0 2 spring jpa spring-data-jpa spring-data-rest spring-boot

我有一个 Spring JPA rest 存储库。

public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {

    //custom query method
    List<SumLog> findByFoo(String lastName);

    //How do I make this method return the results in REVERSE order?
    List<SumLog> findAll();
Run Code Online (Sandbox Code Playgroud)

}

我希望 findAll() 方法以相反的顺序返回项目。

由于它是一个接口,我不能在这里直接覆盖方法。

这是可能的吗?

Cep*_*pr0 5

您可以在查询方法中使用“OrderBy”和“Desc”关键字:

List<SumLog> findAllByOrderByIdDesc();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您会得到这样的 SQL 查询:

select ... from sum_logs sl order by sl.id desc
Run Code Online (Sandbox Code Playgroud)

更多信息:查询创建

更新

要更改存储库默认方法的行为,您可以使用自己的查询覆盖它们:

@Query("select sl from SimLog order by sl.id desc")
@Override
List<SumLog> findAll();

@Query("select sl from SimLog order by sl.id desc")
@Override
Page<SumLog> findAll(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

更新 2

更灵活的方法 - 如果排序顺序尚未设置,那么我们通过 'id desc' 设置它:

@Override
default Page<SumLog> findAll(Pageable p) {
    if (p.getSort().isUnsorted()) {
        findAllBy(PageRequest.of(p.getPageNumber(), p.getPageSize(), Sort.by(Sort.Direction.DESC, "id")));
    }
    return findAllBy(p);
}

Page<SumLog> findAllBy(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

  • @csch0 所以你正在使用 Spring Data REST - 你应该在问题中写过它...... (2认同)