Hibernate标准返回页面和rowcount [英] Hibernate criteria return page and rowcount

查看:74
本文介绍了Hibernate标准返回页面和rowcount的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Hibernate Criteria我正在尝试实现分页,但问题在于,对于每个页面提取,我必须为结果创建两个数据库调用,并为总记录计数创建另一个数据库。
是否有任何有效的方法,以便在一个数据库调用中,我可以同时获得这两个数据,或者我可以减少数据库调用。

  Criteria criteria = session.createCriteria(Student.class); 
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.add(Restrictions.ne(enquiryStatus,ENQUIRY.JOINED));
criteria.setMaxResults(10);
criteria.setFirstResult(((paginate.getStartIndex() - 1)* 10);

criteria.setProjection(Projections.rowCount());
//这里我需要获取总行数并记录


解决方案 div>

是的,你需要单独的查询来获得总结果数。

 查询aCountQuery = session.createQuery(select count(s.id)from Student s 
where s.enquiryStatus !=:enquiryStatus);
CountQuery.setParameter(enquiryStatus,ENQUIRY.JOINED);
Long resultCount =(Long)aCountQuery.uniqueResult();

  Criteria criteria = session.createCriteria(Student.class); 
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.add(Restrictions.ne(enquiryStatus,ENQUIRY.JOINED));
criteria.setProjection(Projections.rowCount())
long resultCount =(Long)criteria.uniqueResult();

更新

现在,您可以使用相同的Criteria获得分页和结果计数结果

  Criteria criteria = session.createCriteria(Student.class) ; 
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.add(Restrictions.ne(enquiryStatus,ENQUIRY.JOINED));
criteria.setMaxResults(10);
criteria.setFirstResult(((paginate.getStartIndex() - 1)* 10);
列表< Student> students = criteria.list();

criteria.setProjection(null);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Long resultCount =(Long)criteria.uniqueResult();


Using Hibernate Criteria i am trying to achieve pagination but the problem is that for every page fetch i have to make two db calls one for results and another for total records count. Is there any efficient way so that in a single db call i can get both the data or i can reduce db calls.

 Criteria criteria=session.createCriteria(Student.class);
 criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
 criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED));
 criteria.setMaxResults(10);
 criteria.setFirstResult((paginate.getStartIndex()-1)*10);

 criteria.setProjection(Projections.rowCount());
//here i need to fetch total row count and records

解决方案

Yes you need the separate query to get the total result count.

    Query aCountQuery  = session.createQuery("select count(s.id) from Student s 
           where s.enquiryStatus != :enquiryStatus");
           aCountQuery.setParameter("enquiryStatus", ENQUIRY.JOINED);
    Long resultCount = (Long)aCountQuery.uniqueResult();

or

   Criteria criteria=session.createCriteria(Student.class);
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED));
        criteria.setProjection(Projections.rowCount())
   Long resultCount = (Long)criteria.uniqueResult();

Update

Now you can use same Criteria for results with pagination and result count

  Criteria criteria=session.createCriteria(Student.class);
     criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
     criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED));
     criteria.setMaxResults(10);
     criteria.setFirstResult((paginate.getStartIndex()-1)*10);
     List<Student> students = criteria.list();

    criteria.setProjection(null);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    Long resultCount = (Long)criteria.uniqueResult();

这篇关于Hibernate标准返回页面和rowcount的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆