java - 如何限制JPA和Informix中的查询?

标签 java hibernate jakarta-ee 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_...

何时应该跳过 10 个前 10。现在如何使用 JPA 分页方法?

我正在使用 JBoss 7.1Spring 3.2Hibernate 4.0.1Informix 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/

相关文章:

java - 有关 JSON 数组的问题

java - 如何通过从 webapp 调用 URL 来访问图像

java - 从 PC 发送到 PC 以及从 PC 发送到 Android 时读取的字节数组不一致

java - 如何在 Java 中动态构建 Drools 规则?

java - 将模型列表转换为json格式

hibernate - 如何在EAR中的ejb模块和web模块之间共享Persistence.xml?

java - Jvm 需要很长时间才能解析 localhost 的 ip-address

java - 在创建新项目时在 Java Eclipse 中按行编写默认代码

java - 实体对象集合状态不一致

jsf - 如何在 ManagedBean 中注入(inject) CDI Bean?