Java 使用Pageable和Page创建Spring数据存储库的自定义方法

Java 使用Pageable和Page创建Spring数据存储库的自定义方法,java,hibernate,spring-boot,spring-data-jpa,jhipster,Java,Hibernate,Spring Boot,Spring Data Jpa,Jhipster,我创建了自定义存储库并希望创建自定义本机查询: public Page<Friend> findFriends(FriendCriteria friendCriteria, Pageable pageable) 公共页面findFriends(FriendCriteria FriendCriteria,可分页) 我如何才能适应那里的可分页对象并作为页面对象获得结果?我有类似的要求,但找不到任何直接的方法。下面是我如何实现的代码片段。希望这会有所帮助 public Page<

我创建了自定义存储库并希望创建自定义本机查询:

public Page<Friend> findFriends(FriendCriteria friendCriteria, Pageable pageable)
公共页面findFriends(FriendCriteria FriendCriteria,可分页)

我如何才能适应那里的可分页对象并作为页面对象获得结果?

我有类似的要求,但找不到任何直接的方法。下面是我如何实现的代码片段。希望这会有所帮助

public Page<Friend> findFriends(FriendCriteria friendCriteria, Pageable pageable){
   //Find actual content from friendCriteria and call method below.

  extractPage(pageable, <actual content>);

}


public static <T> Page<T> extractPage(Pageable page, List<T> contents) {
        int startIndex = page.getPageNumber() == 0 ? page.getPageNumber() : page.getPageNumber() + page.getPageSize();
        int toIndex = startIndex + page.getPageSize();
        toIndex = toIndex > contents.size() ? contents.size() : toIndex;

        final int total = contents.size();

        List<T> filteredContents;

        if (startIndex < contents.size()) {
            filteredContents = contents.subList(startIndex, toIndex);
        } else {
            filteredContents = new ArrayList<>();
        }

        TotalSupplier totalSupplier = () -> {
            return total;
        };

        return PageableExecutionUtils.getPage(filteredContents, gotoPage(page.getPageNumber(), page.getPageSize()),
                totalSupplier);
    }

    private static PageRequest gotoPage(int number, int size) {
        return new PageRequest(number, size);
    }
公共页面findFriends(FriendCriteria FriendCriteria,可分页){
//从下面的friendCriteria和call方法中查找实际内容。
提取页面(可分页,);
}
公共静态页面提取页面(可分页页面,列表内容){
int startIndex=page.getPageNumber()==0?page.getPageNumber():page.getPageNumber()+page.getPageSize();
int-toIndex=startIndex+page.getPageSize();
toIndex=toIndex>contents.size()?contents.size():toIndex;
最终整数总计=contents.size();
列出过滤内容;
if(startIndex{
返回总数;
};
返回PageableExecutionUtils.getPage(filteredContents,gotoPage(page.getPageNumber(),page.getPageSize()),
总供应商);
}
专用静态PageRequest gotoPage(整数、整数大小){
返回新页面请求(编号、大小);
}

将尝试此方法,我得到以下结果:类型PageableExecutionUtils中的方法getPage(List,Pageable,PageableExecutionUtils.TotalSupplier)不适用于您使用的spring启动版本的参数(List,PageRequest,LongSupplier)?此代码适用于2.0.4.RELEASE.1.5.10.RELEASE version更新了我的答案。注意:我还没有编译,但没有发现任何失败的原因。谢谢您的尝试。还有一个问题,为什么会出现此错误:找不到Friend!类型的属性findFriends!。这是自定义查询方法。