1. 程式人生 > >Hibernate裡面如何用Criteria 查詢記錄數

Hibernate裡面如何用Criteria 查詢記錄數

【問題描述】在工作中,有一個比較複雜的feature使用的是Hibernate的Criteria實現的查詢,但是PM要求在查詢資料前,先告知使用者有多少條資料,讓使用者去選擇返回多少條記錄。

【解決辦法】使用Projections.count("property") 或者 Projections.rowCount()

  1. Criteria c = session.createCriteria(User.class.getName());  
  2. c.setProjection(Projections.rowCount());  
  3. CheckRowNumResponseBean result = new
     CheckRowNumResponseBean();  
  4. result.setRowNum(Integer.parseInt(c.uniqueResult().toString()));  
  5. setResult(result);  

檢視Hibernate生成的query是:

  1. select  
  2.     count(*) as y0_  
  3. from  
  4.     USER this_  
  5. where  
  6.     (  
  7.         1=1
  8.     )  


備註:有些朋友可能使用的是c.list.size().返回的記錄數,其實這樣的話,hibernate是從資料庫裡面把所有滿足條件的記錄查詢出來放到一個list裡面,然後再用list的length返回長度。這樣不是此需求的初衷。因為這樣會消耗效能。。。並且在資料過多的情況下面,會造成tomcat的OutOFMemory錯誤