2014-07-17 55 views
0

我面臨着以下問題查詢的結果:行計數在休眠

Criteria criteria = getSession().createCriteria(User.class); 

    ProjectionList projectionList = Projections.projectionList(); 
    projectionList.add(Projections.property("id")); 
    projectionList.add(Projections.countDistinct("friend_id")); 
    projectionList.add(Projections.property("registrationDate")); 
    projectionList.add(Projections.property("lastLoginDate")); 

    criteria.setProjection(projectionList); 

這段代碼返回我一對夫婦與我所需要的數據項。但是,我需要它的行數。是否有乾淨的做法,而不僅僅是做:

return criteria.list().size(); 

+0

是的,有http://stackoverflow.com/questions/1372317/how-do-we-count-rows-using-hibernate – luanjot

+0

對不起,必須改變查詢更接近我使用的東西,我確實檢查了答案,但它並沒有真正回答我的問題。在查詢中有一個countDistinct,使用普通計數會給我錯誤的條目數。 –

+0

你已經找到了解決方案。最好發佈並接受它作爲你自己的答案。 – MystyxMac

回答

0

看來,我的問題是缺乏分析的原因造成的:

Criteria criteria = getSession().createCriteria(User.class); 
criteria.setProjection(Projections.countDistinct("id")); 

return (Long) criteria.uniqueResult(); 

,因爲我們已經通過用戶ID進行分組,然後我不得不做的就是找到量,如果唯一的用戶ID匹配搜索條件。

0
Criteria criteria = session.createCriteria(Track.class) 
        .setProjection(Projections.rowCount()); 

      List result = criteria.list(); 
      if (!result.isEmpty()) { 
       Integer rowCount = (Integer) result.get(0); 
       System.out.println("Total records: " + rowCount); 
+0

此方法覆蓋投影列表,導致數據行數不正確。注意投影列表中有一個「count distinct」,它將用戶分組並計算他們分配了多少個不同的friend_id。 –

0

如果將此添加到ProjectionList的末尾會怎樣?

Projections.rowCount() 

我使用下面的代碼來搜索一些東西,然後得到它的rowcount。

Criteria criteria = session.createCriteria(LogEntryOracle.class); 
if (search != null && !search.isEmpty()) { 
    criteria.add(Restrictions.ilike("xml", search, MatchMode.ANYWHERE)); 
} 

criteria.setProjection(Projections.rowCount()); 
return (Number) criteria.uniqueResult(); 
+0

我發現瞭解決方案,我將用我的解決方案更新該帖子。我沒有嘗試這個解決方案,因爲我找到了一個更簡單的方法。 –