java - 如何限制休眠条件 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 查询文本一样?
请注意:
我想使用 Criteria API 并避免原生查询 - 我可以使用原生查询,但一般不想摆脱 Criteria,
避免处理返回的列表,以便它只返回我认为没有意义且效率不高的结果范围。
解决方案
您可以设置 usesetFirstResult
以跳过记录并setMaxResults
从该点获取记录数。
Criteria criteria = session.createCriteria(Foo.class);
criteria.setFirstResult(0);
criteria.setMaxResults(pageSize);
List<Foo> firstPage = criteria.list();