当我位于结果列表的第一页时,这是生成的查询:
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_...
何时应该跳过 10 个前 10
。现在如何使用 JPA 分页方法?
我正在使用 JBoss 7.1
、Spring 3.2
、Hibernate 4.0.1
和 Informix 11.70
。
最佳答案
不幸的是,Hibernate 团队已经有一段时间没有更新 Informix DBMS 的方言了,因此 Hibernate 发行版中的 InformixDialect 不支持 SKIP 功能。 Hibernate JIRA 在更新 InformixDialect 时遇到问题 HHH-5414附带补丁(开封三年以上)。
您可以尝试将 InformixDialect 类替换为 IIUG site 中的类。 。 只需将该文件放入您的项目中的尊重的包目录中并尝试一下即可。
关于java - 如何限制JPA和Informix中的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251338/