Когда я на первой странице моего списка результатов, вот сгенерированный запрос:Как ограничить запросы в JPA и Informix?
select first 10 books0_.id as id100_...
И все работает отлично. Однако, на второй странице я получаю следующее сообщение об ошибке:
org.hibernate.exception.GenericJDBCException: ResultSet Type is TYPE_FORWARD_ONLY.
Код для перечисления здесь:
// calculating paging offset
int perPage = Integer.parseInt(Constants.RESULTS_PER_PAGE);
int firstResult = (page == null) ? 0 : (page - 1) * perPage;
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Books> criteria = builder.createQuery(Books.class);
Root<Books> entityRoot = criteria.from(Books.class);
criteria.select(entityRoot);
// constructing list of parameters
List<Predicate> predicates = new ArrayList<Predicate>();
...
// add the list of parameters
criteria.where(builder.and(predicates.toArray(new Predicate[]{})));
//execute query and paginate results
TypedQuery<Books> listQuery = em.createQuery(criteria);
listQuery.setFirstResult(firstResult);
listQuery.setMaxResults(perPage);
return listQuery.getResultList();
И сгенерированный запрос для второго запроса:
select first 20 books0_.id as id100_...
если есть skip 10 first 10
. Как я могу использовать методы пейджинга JPA сейчас?
Я использую JBoss 7.1
, Spring 3.2
, Hibernate 4.0.1
и Informix 11.70
.
Каково значение страницы? Где вы инициализируете/устанавливаете это значение? –
Его 'страница = 0' в первый раз. RESULTS_PER_PAGE - 10. Нет ничего плохого в вычислении страниц, он работает, когда я использую собственные запросы с 'SKIP' и' FIRST'. –
Вы можете посмотреть следующий пример, чтобы достичь такого же использования построителя критериев. http://stackoverflow.com/questions/10144487/jpa-paging-with-numbers-and-next-previous –