【问题标题】:How to limit queries in JPA and Informix?如何限制 JPA 和 Informix 中的查询?
【发布时间】: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.1Spring 3.2Hibernate 4.0.1Informix 11.70

【问题讨论】:

  • 页面初始值是多少?你在哪里初始化/设置这个值?
  • 这是page=0 第一次。 RESULTS_PER_PAGE 是 10。页面的计算没有任何问题,当我使用带有 SKIPFIRST 的本机查询时,它可以工作。
  • 您可以查看以下示例以使用标准构建器实现相同的目的。 stackoverflow.com/questions/10144487/…

标签: java hibernate jakarta-ee jpa informix


【解决方案1】:

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

您可以尝试将 InformixDialect 类替换为来自 IIUG site 的类。 只需将该文件放入您的项目中相应的包目录中并尝试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2021-11-24
    • 2021-09-04
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多