Мы используем Spring Boot 2 с Spring Data и его функцией PagingAndSortingRepository.Это хорошо работает для отдельных запросов, но в одном случае мы должны сделать три разных запроса и реализовать разбиение на страницы для комбинированного результата.
Каков наилучший способ сделать это?
Вот что япопытался:
1) Написать запрос типа UNION или JOIN, который уже возвращает объединенный результат в виде страницы или слайса.Однако этот запрос занимает почти в 10 раз больше времени, чем три отдельных запроса и агрегация в Java.Здесь речь идет о сложных вычислениях (серверная часть PostGIS).
2) Построение страниц / фрагментов вручную с использованием существующих классов SliceImpl или PageImpl.Это отлично работает для первоначального запроса, но завершается неудачно при втором запросе, когда пользователь говорит что-то вроде: дайте мне страницу 1 (размер страницы == 10 элементов).На первой странице (страница 0) может быть 4 элемента из первого запроса и 6 из 12 элементов из второго запроса.Запрос на странице 1 дает мне тогда 0 результатов из первого запроса и 2 (вместо 6) из второго, заполняя остальное из третьего запроса.Совершенно очевидно, что это не может работать с логической точки зрения.
Любые другие идеи?
Редактировать: мы планируем добавить Hibernate Search и Caching, что может решить эту проблему извне, выбрав опцию1) достаточно быстро.Мой вопрос предназначался для того, чтобы попросить «внутреннее» решение, то есть некоторый код, который я могу написать сегодня, пока у нас не будет внешнего решения.