我正在使用 JPARespository
进行所有 CRUD 操作。最近我想实现排序,所以我继续 Pagable
。
问题是,我希望存储库方法返回 List
对象,我在服务层中使用它们。
我怎样才能做到这一点,有没有办法将这些 Page
对象转换为 List
?
原文由 Soumitri Pattnaik 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 JPARespository
进行所有 CRUD 操作。最近我想实现排序,所以我继续 Pagable
。
问题是,我希望存储库方法返回 List
对象,我在服务层中使用它们。
我怎样才能做到这一点,有没有办法将这些 Page
对象转换为 List
?
原文由 Soumitri Pattnaik 发布,翻译遵循 CC BY-SA 4.0 许可协议
一次获取所有结果的最简单方法是使用 Pageable.unpaged() ,如下所示:
Page<Employee> allEmployees = employeeRepository.findAll(Pageable.unpaged());
allEmployees.getContent();
但是,如果您担心一次检索太多数据,而是更喜欢以小块的形式进行检索,则可以使用类似于以下的服务或存储库方法:
private List<Employee> findAll() {
List<Employee> allEmployees = new ArrayList<>();
// First page of employees -- 5000 results per page
PageRequest pageRequest = PageRequest.of(0, 5000);
Page<Employee> employeePage = employeeRepository.findAll(pageRequest);
allEmployees.addAll(employeePage.getContent());
// All the remaining employees
while (employeePage.hasNext()) {
Page<Employee> nextPageOfEmployees = employeeRepository.findAll(employeePage.nextPageable());
allEmployees.addAll(nextPageOfEmployees.getContent());
// update the page reference to the current page
employeePage = nextPageOfEmployees;
}
return allEmployees;
}
检查此 页面 以了解以块形式获取数据的优点和缺点。
原文由 Chaithu Narayana 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
如果您在 jpa 存储库方法中使用 pageable,spring 将始终返回一个页面而不是一个列表。我建议你有一个调用存储库方法并将页面结果的内容提取到列表中的服务方法。
因此,如果您的存储库方法是这样的:
那么你可以有一个服务类,它有一个调用存储库方法的方法
所以在你的调用类中而不是直接调用存储库你可以只使用该服务。因此: