首页 > 解决方案 > 如何限制休眠条件 API 获得的结果?

问题描述

假设我们有一个 Person 类,它是一个简单的休眠实体。我们有一个 DAO,它有一个方法可以检索名称列表中列出的所有 Person 行:

@Transactional
public List<Person> getPersons(List<String> personNames) {

ArrayList<Criterion> locationCriterions = new ArrayList<Criterion>();

if(personNames == null) {
       return new ArrayList<Person>();
}

Criterion [] arrayOfPersonCriterions = new Criterion 
[personNames.size()];

   int currentIndex = 0;

   for(String currentPersonName : personNames) {   
   arrayOfPersonCriterions[currentIndex](Restrictions.eq("name", 
   currentPersonName));
   currentIndex++;
   }     

   Criterion personFinalCriterion = Restrictions.or(arrayOfPersonCriterions);
   Session currentSession = sessionFactory.getCurrentSession();
   Criteria criteria = currentSession.createCriteria(Person.class);

   return (List<Person>)criteria.add(personFinalCriterion).list();

} 

问题:如何限制检索结果的数量 - 就像在 SQL 中我们可以使用 LIMIT X、Y 查询文本一样?

请注意:

标签: javahibernate

解决方案


您可以设置 usesetFirstResult以跳过记录并setMaxResults从该点获取记录数。

Criteria criteria = session.createCriteria(Foo.class);
criteria.setFirstResult(0);
criteria.setMaxResults(pageSize);
List<Foo> firstPage = criteria.list();


推荐阅读