Разбивка на страницы в Spring с использованием @RestController, но без использования Spring Data Rest Pageable? - PullRequest
0 голосов
/ 21 апреля 2020

Я знаю, что с помощью Spring Data Rest я могу использовать встроенную функциональность разбиения на страницы. Вот так

Page<Product> findByCategoryId(@RequestParam("id") Long id, Pageable pageable);

Однако я нахожусь в проекте и использую Spring mvc @RestController и хочу добиться ту же функциональность я попробовал так: -

Session currentSession = entityManager.unwrap(Session.class);
Query<Product> theQuery = currentSession.createQuery("from Product", Product.class);
theQuery.setFirstResult((pageNumber-1) * pageSize); // This is 0 based
theQuery.setMaxResults(pageSize);
List<Product> dataList = theQuery.getResultList();  
return dataList;

Работает, но я не получаю count из общего количества записей в таблице. И для нумерации пользовательского интерфейса мне это нужно.

Так что мне нужно каждый раз нажимать 2 запроса, как выше, а затем 1 запрос, чтобы получить размер записи. (Что может вызвать проблемы с данными c при обновлении записей)

Или

Есть ли лучший способ добиться этого в SINGLE QUERY

1 Ответ

1 голос
/ 21 апреля 2020

Если вам нужно общее количество записей, вы должны создать второй запрос.

Вы можете сделать это в одном запросе с подзапросом, но тогда вы не можете использовать сущности в качестве типа возврата.

В отношении данных syn c проблемы: если вы выполняете оба запроса в одной транзакции, проблем не возникает.

Кстати. почему вы разворачиваете сессию Hiberante? В вашем примере это не нужно.

...