У меня такая же проблема, как описано в this post.OpenJPA Paging (setMaxResults/setFirstResult)
Существует решение, которое добавляет первичный ключ к предложению sort, который, я думаю, в порядке, но правильное разбиение на страницы должно выполняться самим OpenJPA. Мы используем OpenJPA 2.1.1 и Oracle 11g.
Мое решение будет (изменение OpenJPA):
Изменение SQL Заявление поколения. На самом деле это следующее, что приводит к описанным проблемам.
SELECT * FROM (SELECT r.*, ROWNUM RNUM FROM ([my statement]) r WHERE ROWNUM <= 50) WHERE RNUM > 25
я предпочел бы:
SELECT outer.* FROM (
SELECT ROWNUM rn, inner.* FROM
([my statement])
inner)
outer WHERE outer.rn > 25 AND outer.rn <= 50
Почему первый из них используется? Лучшая производительность? В противном случае второй будет правильным для пейджинга с OpenJPA.
Есть ли другая возможность в OpenJPA сделать подкачку в правильном направлении?