1

当我在结果列表的第一页时,生成的查询如下:

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.1Informix 11.70

4

1 回答 1

1

不幸的是,Hibernate 团队很长一段时间都没有更新 Informix DBMS 的方言,因此 Hibernate 发行版中的 InformixDialect 不支持 SKIP 功能。Hibernate JIRA 在使用提供的补丁更新 InformixDialect HH​​H-5414时遇到问题(已打开超过三年)。

您可以尝试用IIUG 站点中的一个替换 InformixDialect 类。只需将该文件放在项目中受尊重的包目录中并尝试一下。

于 2013-10-14T16:38:43.183 回答