Получение глобального индекса элемента с нумерацией страниц JPA Postgresql

#json #spring #jpa #spring-data-jpa #pageable

#json #весна #jpa #spring-data-jpa #разбиение на страницы

Вопрос:

В моем проекте есть служба, которая извлекает список документов. До сих пор их можно было получить с помощью объекта разбивки на страницы, таким образом, мы не отправляем обратно во внешний интерфейс все элементы.

     public Page<Document> findDocumentPage(Pageable pageable) {
        return this.documentService.findAllByPage(pageable);
    }
  

Проблема в том, что мне нужен глобальный индекс документа со всех страниц. Например, допустим, у меня есть список страниц с результатами после запроса:

  firstResult:{
        page: 1,
        document_list: [{doc:{ id: a, content: ''}},
                        {doc:{ id: b, content: ''}},
                        {doc:{ id: c, content: ''}}]
    }

    secondResult:{
        page: 2,
        document_list: [{doc:{ id: d, content: ''}},
                        {doc:{ id: e, content: ''}},
                        {doc:{ id: f, content: ''}}]
    }
  

Эти результаты не зависят друг от друга. Есть ли способ сообщить, что документ с идентификатором «e» является 5-м элементом во всех результатах страниц, не имея доступа к результатам предыдущей страницы. Также страницы могут иметь разные размеры, у некоторых может быть 30 результатов, у других 20, это может быть x.

Я согласен с сохранением списка в бэкэнде с количеством элементов предыдущих страниц, а затем вычислением индекса на основе номера страницы, индекса на текущей странице и размера предыдущих страниц. Однако мне это не кажется удачным решением.

Ответ №1:

Если у вас есть Page представление одного из результатов, это можно легко вычислить для всех элементов на этой странице следующим образом (по модулю однократных ошибок):

 globalIndex = page.getPageable().getOffset()   localIndex
  

Где localIndex находится индекс рассматриваемого элемента в page.getContent() .