如何使用带有 Pageable 的 Spring Data JPA 分页来更改数据?

Posted

技术标签:

【中文标题】如何使用带有 Pageable 的 Spring Data JPA 分页来更改数据?【英文标题】:How to use Spring Data JPA Pagination with Pageable for changing data? 【发布时间】:2020-04-26 10:33:50 【问题描述】:

我指的是这个博客中的例子 - https://www.logicbig.com/tutorials/spring-framework/spring-data/pagination-returning-page.html

Pageable pageable = PageRequest.of(0, 500);
      while (true) 
          page = repo.findByDept("Sales", pageable);
          int number = page.getNumber();
          int numberOfElements = page.getNumberOfElements();
          int size = page.getSize();
          long totalElements = page.getTotalElements();
          int totalPages = page.getTotalPages();
          System.out.printf("page info - page number %s, numberOfElements: %s, size: %s, "
                          + "totalElements: %s, totalPages: %s%n",
                  number, numberOfElements, size, totalElements, totalPages);
          List<Employee> employeeList = page.getContent();
          employeeList.forEach(employee -> updateDept());
          if (!page.hasNext()) 
              break;
          
          pageable = page.nextPageable();
      

在这里,在阅读完第一页之后,我正在修改页面中返回的所有条目的部门。 因此,当获取第二页时,总编号。页的变化。这导致只有部分数据被更改。 例如,代码检索第 1 页(共 5 页),然后检索第 2 页(共 4 页)和第 3 页(共 3 页)并结束。有没有办法在每次迭代时刷新页码以及总页数或更好的方法?

【问题讨论】:

【参考方案1】:

我正在寻找类似的东西 - https://***.com/a/38350236/7566942

以下解决方案对我有用。

Pageable pageable = PageRequest.of(0, 500);
      while (true) 
          page = repo.findByDept("Sales", pageable);
          int number = page.getNumber();
          int numberOfElements = page.getNumberOfElements();
          int size = page.getSize();
          long totalElements = page.getTotalElements();
          int totalPages = page.getTotalPages();
          System.out.printf("page info - page number %s, numberOfElements: %s, size: %s, "
                          + "totalElements: %s, totalPages: %s%n",
                  number, numberOfElements, size, totalElements, totalPages);
          List<Employee> employeeList = page.getContent();
          employeeList.forEach(employee -> updateDept());
          if (!page.hasNext()) 
              break;
          
          //pageable = page.nextPageable();
      

想知道是否有更好的方法吗?

【讨论】:

以上是关于如何使用带有 Pageable 的 Spring Data JPA 分页来更改数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Sort 和 Pageable 使用 Spring data JPA 开箱即用地查询数据?

如何使用 Pageable 在 Spring Boot 和 Thymeleaf 中显示按点赞数排序的技能列表?

如何在spring boot中使用Pageable接口从http url中删除/处理不相关或错误的排序参数?

“spring.data.web.pageable.one-indexed-parameters=true”不起作用

如何记录Spring Boot JPA Pageable绑定值?

如何使用 Pageable 按地图值排序