使用CriteriaQuery时如何限制结果

时间:2018-08-03 20:01:02

标签: java hibernate groovy dropwizard

我继承了一个普通的代码库(除其他外)使用Hibernate作为Dropwizard的一部分作为ORM,并且在更新依赖项的过程中,我开始看到以下警告。

org.hibernate.orm.deprecation: HHH90000022: Hibernate's legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead

作为一个实验,我尝试更新其中一个查询以使用新的CriteriaQuery API。但是我很快遇到一个问题,旧代码使用setMaxResults()。我假设这是在使用LIMIT来限制结果数。

如何将CriteriaQuery的结果限制为1

一个相关的问题,如何使用CriteriaQuery进行分页?

我尝试通读《 Hibernate 5.3用户指南》(特别是第16 the the new API章)中关于“限制”和“最大结果”的内容,而我所能找到的所有话题都在“ Legacy Hibernate Criteria Queries”中“。

如果有帮助,我很乐意提供一些示例代码,但是您可以使用手册(Example 534. Selecting an attribute)中的示例,并演示如何通过限制结果来增强示例。

2 个答案:

答案 0 :(得分:0)

setFirstResult()上这样定义setMaxResults()Query(偏移量= 0,限制值= 10):         

sessionFactory.getCurrentSession().createQuery(criteriaQuery).setFirstResult(0).setMaxResults(10).getResultList());

答案 1 :(得分:-1)

要进行分页,只需设置第一个和最大(假设您传入Pageable对象:

criteria.setFirstResult(pageable.gotOffset());
criteria.setMaxResults(pageable.getPageSize());

另外,请致电:

Criteria queryCriteria = session.createCriteria(MonthlySubscriber.class);
queryCriteria.setFirstResult(0);
queryCriteria.setMaxResults(1);
monthlySubscriberList = queryCriteria .list();