为了账号安全,请及时绑定邮箱和手机立即绑定

如何限制休眠条件 API 获得的结果?

如何限制休眠条件 API 获得的结果?

绝地无双 2023-06-21 14:46:23
假设我们有一个 Person 类,它是一个简单的休眠实体。我们有一个 DAO,它有一个方法可以检索名称列表中列出的所有 Person 行:@Transactionalpublic 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,避免处理返回的列表,以便它只返回我认为无意义且效率低下的结果范围。
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

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


Criteria criteria = session.createCriteria(Foo.class);

criteria.setFirstResult(0);

criteria.setMaxResults(pageSize);

List<Foo> firstPage = criteria.list();


查看完整回答
反对 回复 2023-06-21
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可以使用以下两种方法Criteria


criteria.setFirstResult(indexOfTheFirstRecord)指定第一条记录(从0开始) criteria.setMaxResults(numberOfTheRecords)指定记录数


为了简单起见,您可以使用此类


public class Pagination {


    public static final Pagination EMPTY = new Pagination(0, 0);


    /** Page index, begins from 0. */

    private final int pageIndex;


    /** Objects on page count. */

    private final int pageSize;


    public Pagination(int pageIndex, int pageSize) {

        this.pageIndex = pageIndex;

        this.pageSize = pageSize;

    }


    public void addToCriteria(Criteria criteria) {

        if (this == EMPTY) {

            return;

        }

        criteria.setMaxResults(pageSize);

        criteria.setFirstResult(pageIndex * pageSize);

    }


}

例子


获取pageIndex = 1大小为 10 的第二页 ( )(带有startIndex = 10,的记录endIndex = 19)


final int pageIndex = 1;

Pagination pagination = new Pagination(pageIndex, 10);

pagination.addToCriteria(criteria);


查看完整回答
反对 回复 2023-06-21
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信