【发布时间】:2013-08-15 11:00:56
【问题描述】:
当我位于结果列表的第一页时,生成的查询如下:
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。
【问题讨论】:
-
页面初始值是多少?你在哪里初始化/设置这个值?
-
这是
page=0第一次。 RESULTS_PER_PAGE 是 10。页面的计算没有任何问题,当我使用带有SKIP和FIRST的本机查询时,它可以工作。 -
您可以查看以下示例以使用标准构建器实现相同的目的。 stackoverflow.com/questions/10144487/…
标签: java hibernate jakarta-ee jpa informix