Hibernate裡面如何用Criteria 查詢記錄數
阿新 • • 發佈:2019-02-14
【問題描述】在工作中,有一個比較複雜的feature使用的是Hibernate的Criteria實現的查詢,但是PM要求在查詢資料前,先告知使用者有多少條資料,讓使用者去選擇返回多少條記錄。
【解決辦法】使用Projections.count("property") 或者 Projections.rowCount()
- Criteria c = session.createCriteria(User.class.getName());
- c.setProjection(Projections.rowCount());
-
CheckRowNumResponseBean result = new
- result.setRowNum(Integer.parseInt(c.uniqueResult().toString()));
- setResult(result);
檢視Hibernate生成的query是:
- select
- count(*) as y0_
- from
- USER this_
- where
- (
- 1=1
- )
備註:有些朋友可能使用的是c.list.size().返回的記錄數,其實這樣的話,hibernate是從資料庫裡面把所有滿足條件的記錄查詢出來放到一個list裡面,然後再用list的length返回長度。這樣不是此需求的初衷。因為這樣會消耗效能。。。並且在資料過多的情況下面,會造成tomcat的OutOFMemory錯誤