我可以将Slice与findAll方法一起使用:Spring Data

Sac*_*rma 5 java spring spring-data spring-data-jpa

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

我发现有这样的UI(下一个基础)的Slice数据类型,不需要总记录/页面,因此不需要计数查询.

我可以使用Slice返回类型findByName(Pageable)等方法,但如果我使用Slice for findAll(Pageable),它仍然执行计数查询.

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

PS:我想要切片提供的功能 - hasNext,size等,我也不需要使用规范.

任何帮助表示赞赏.

hov*_*yan 8

可以使用Slicewith findAll()- 您只需要扩展正确的 Spring JPA Repository。

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

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


Jen*_*der 5

您可以为此使用查询派生。基于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);
Run Code Online (Sandbox Code Playgroud)

您可以通过将以下内容添加到存储库来根据您的需要进行修改:

Slice<User> findBy(Pageable page);
Run Code Online (Sandbox Code Playgroud)

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