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

标签 java hibernate

假设我们有一个 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/

相关文章:

java - 如何注释 map 以连接两个看似不相关的类?

java - 某些 SQL 函数在 HQL 中不起作用

java - Elasticsearch 无法启动 - 权限问题

java - 当数据是字符串日期时对排序集进行排序的好方法

java - 使用 Jasper 报表在一份报表上打印动态元素数量

java - 我无法将图像直接保存到应用程序目录的文件夹中

java - 奇怪的 java.sql.SQLException : Column 'fk_Content' not found

java - Hibernate 在查找时调用 flush- 导致 not-null 错误

java - JPA多对一: Deleting One to Many side

java - 我如何让我的 spaceship 移动?