Как использовать Spring Data JPA Pagination с Pageable для изменения данных? - PullRequest
0 голосов
/ 26 апреля 2020

Я имею в виду пример в этом блоге - 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();
      }

Здесь, после прочтения первой страницы, я изменяю отдел для всех записей, возвращаемых в Page. Следовательно, при загрузке 2-й страницы общее количество нет. страниц меняются. Это приводит к изменению только частичных данных. Например, код извлекает страницу 1 из 5, затем страницу 2 из 4 и страницу 3 из 3 и завершается. Есть ли способ обновить sh номер страницы на каждой итерации вместе с общей страницей или лучший подход для этого?

1 Ответ

0 голосов
/ 26 апреля 2020

Я искал что-то похожее на это - { ссылка }

Приведенное ниже решение работает для меня.

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();
      }

Хотелось бы узнать, есть ли лучший подход?

...