我可以将切片与findAll方法一起使用吗:弹簧数据

2022-09-04 03:20:42

我想要的 : 跳过 spring 执行的计数查询。findAll(Pageable)

我发现这样的UI有切片数据类型(基于下一个),其中不需要总记录/页数,因此不需要计数查询。

我可以对诸如此类的方法使用返回类型,但是如果我使用 Slice for findAll(Pageable),那么它仍然执行计数查询。SlicefindByName(Pageable)

是否有一种解决方法,我可以使用切片来避免计数查询?findAll

P.S. : 我想要切片提供的功能,如 - 有下一个,大小等,我也不需要使用规范。

任何帮助是值得赞赏的。


答案 1

可以将 SlicefindAll() 一起使用 - 您只需要扩展正确的 Spring JPA 存储库即可。

如果扩展 JpaRepository,它将不起作用,因为它扩展了 PagingAndSortingRepository,并且已经在分页存储库中定义了 findAll(可分页)方法。

如果您扩展CrudRepository,那么您将能够在存储库中定义方法。Slice<T> findAll(Pageable pageable)


答案 2

为此,可以使用查询派生。基于Spring Data JPA示例

/**
 * Returns a {@link Slice} counting a maximum number of {@link Pageable#getPageSize()} users matching given criteria
 * starting at {@link Pageable#getOffset()} without prior count of the total number of elements available.
 * 
 * @param lastname
 * @param page
 * @return
 */
Slice<User> findByLastnameOrderByUsernameAsc(String lastname, Pageable page);

您可以通过向存储库添加以下内容来根据需要对其进行修改:

Slice<User> findBy(Pageable page);

由于它没有任何其他条件,因此它执行限制为单个页面,但没有计数查询。findAll


推荐