gpt4 book ai didi

java - 如何限制hibernate criteria API获得的结果?

转载 作者:行者123 更新时间:2023-12-02 01:21:02 25 4
gpt4 key购买 nike

假设我们有一个 Person 类,它是一个简单的 hibernate 实体。我们有一个 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 并避免 native 查询 - 我可以使用 native 查询,但一般不想摆脱 Criteria,

  • 避免处理返回的列表,以便它仅返回我认为毫无意义且效率低下的结果范围。

最佳答案

您可以设置使用setFirstResult跳过记录,使用setMaxResults获取从该点开始的记录数。

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

关于java - 如何限制hibernate criteria API获得的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com