![](/img/trans.png)
[英]Hibernate criteria , rowcount() is only working for firstResult = 0
[英]Hibernate criteria return page and rowcount
使用Hibernate Criteria我正在嘗試實現分頁,但問題是對於每個頁面提取我必須為結果進行兩次db調用,對於總記錄計數進行另一次db調用。 有沒有任何有效的方法,以便在單個數據庫調用中我可以獲得數據或我可以減少數據庫調用。
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
是的,您需要單獨的查詢來獲取總結果計數。
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();
要么
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);
List<Student> students = criteria.list();
criteria.setProjection(null);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Long resultCount = (Long)criteria.uniqueResult();
據我所知,沒有直接的方法可以這樣做。盡可能簡單的是寫一個小的hql query
(我的選擇),以及你的主要criteria
。
Number count = (Number) session.createQuery(
"select count(s.id) from Student s").uniqueResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.