2013-08-15 5 views
1

Когда я на первой странице моего списка результатов, вот сгенерированный запрос:Как ограничить запросы в 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

Каково значение страницы? Где вы инициализируете/устанавливаете это значение? –

+0

Его 'страница = 0' в первый раз. RESULTS_PER_PAGE - 10. Нет ничего плохого в вычислении страниц, он работает, когда я использую собственные запросы с 'SKIP' и' FIRST'. –

+0

Вы можете посмотреть следующий пример, чтобы достичь такого же использования построителя критериев. http://stackoverflow.com/questions/10144487/jpa-paging-with-numbers-and-next-previous –

ответ

1

К сожалению, команда Hibernate не обновляет диалект для СУБД Informix в течение некоторого времени, поэтому InformixDialect в распределении hibernate не поддерживает функцию SKIP. Hibernate JIRA выпускает для обновления InformixDialect HHH-5414 с установленным патчем (открыт более трех лет).

Вы можете попробовать заменить класс InformixDialect одним из IIUG site. Просто разместите этот файл в своем проекте в уважительном каталоге пакетов и попробуйте его.

Смежные вопросы