Получить номер страницы указанного элемента c в данных по весне - PullRequest
0 голосов
/ 15 марта 2020

Я создаю веб-приложение с spring-data-rest.

Я хочу показать данные из большой таблицы db в разбитой на страницы таблице в моем интерфейсе. Таблица асинхронно загружает только текущую страницу из API. Это работает отлично и просто из коробки, просто имея хранилище вроде

public interface KeywordRepository extends JpaRepository<Keyword, String>, QuerydslPredicateExecutor<Keyword> {
}

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

Мне нужна какая-то конечная точка, чтобы сообщить мне номер страницы указанного элемента c (по идентификатору) в соответствии с текущие параметры фильтра и сортировки. В основном findPageOfItemById(Long id, Pageable pageable).

Как мне это получить?

Поскольку таблица довольно большая, я не хочу, чтобы весь контент находился в памяти.

1 Ответ

0 голосов
/ 25 марта 2020

Ради полноты я отвечу на свой собственный вопрос.

Он работает довольно хорошо и без загрузки всего списка в память, как было запрошено. Но я все еще надеялся найти чуть больше spring-data-rest y ответа.

    @GetMapping("/getPositionOfItem/{id}")
    public long getPositionOfItem(@PathVariable String id, @QuerydslPredicate(root = SomeEntity.class) Predicate predicate, Pageable pageable) {
        Iterable<SomeEntity> elements = someEntityRepository.findAll(predicate, pageable.getSort());
        return findFirst(elements.iterator(), id);
    }

    private long findFirst(Iterator<SomeEntity> iterator, String id) {
        long index = 0;
        while (iterator.hasNext()) {
            if (iterator.next().getId().equals(id)) {
                return index;
            }
            index++;
        }
        return -1;
    }

Обратите внимание, что я вычисляю положение элемента. Чтобы получить страницу элемента, нам нужно разделить на размер страницы.

...