Нумерация страниц с базой данных JPA и Oracle - PullRequest
0 голосов
/ 20 сентября 2019

На этой неделе я изучал проблему сортировки в WebApp.Сортировка таблицы в браузере по выбранному столбцу не работает должным образом.Оказалось, что в приложении мы использовали JPA CriteriaQuery для создания запроса, а затем создали TypedQuery для разбивки на страницы следующим образом:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SomeEntity> q = cb.createQuery(SomeEntity.class);
Root<SomeEntity> c = q.from(SomeEntity.class);
q.select(c);
...
q.orderBy(cb.asc(c.get("SomeColumn")));
TypedQuery<> query = em.createQuery(q);
query.setFirstResult(pageIx * pageSize);
query.setMaxResults(pageSize);
...

Это в значительной степени то, что документация предлагает создатьзапросы ( см. здесь ).

В журналах я видел, что это генерирует SQL-запрос, подобный следующему:

select * from (
    select lots_of_columns from some_view order by selected_column
) where rownum <= 50

Начиная с Oralce 10 упорядочение вложенного выборане имеет никакого эффекта в соответствии с документацией, и, если я правильно помню, это также имеет смысл в соответствии с реляционной алгеброй.Мы используем Oracle 12c.

Итак, мой вопрос: как мне правильно это понять?Я обнаружил, что offset и fetch должны быть использованы, но я не мог найти, как сказать JPA для генерации SQL соответственно.Также я нашел сообщение, в котором предлагалось добавить идентификатор к заказу по предложению, однако это также не решило проблему.

Заранее благодарю за любые мысли и подсказки по теме.

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