我继承了一个普通的代码库(除其他外)使用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)中的示例,并演示如何通过限制结果来增强示例。
答案 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();