2012-03-13 35 views
0

可能重複:
Hibernate HQL: Get count of results without actually returning them如何讓沒有在HQL彙總查詢返回的記錄,而不實際的返回他們

我有一個HQL這樣的查詢

select new map(t.divisionId as divisionId,t.projectId as projectId,t.roleId as roleId,t.userId as userId, t.reference as reference,t.note as note,sum(t.hoursPlanned) as hoursPlanned,sum(t.hoursUnplanned) as hoursUnplanned,sum(t.hoursPlanned) + sum(t.hoursUnplanned) as total) from TimeSheetsWork t where t.divisionId in :_divisions group by t.divisionId,t.userId,t.projectId,t.roleId

我想得到這個q返回的記錄no uery(沒有實際返回它們)。 Hibenate有沒有辦法做到這一點? thanx提前

+0

thanx Umer,但它告訴使用Criteria API,但我想通過使用HQL – KalpaG 2012-03-13 11:39:52

回答

1

如果你真的只需要記錄,然後ü可以使用count命令,而不是像查詢創建地圖編號:

select count(t.*) from TimeSheetsWork t where t.divisionId in :_divisions group by  
t.divisionId,t.userId,t.projectId,t.roleId 
+0

Thanx mini來完成它。我想要完成的是結果集中返回的記錄數。 'Session.getCurrentSession()。CreateQuery(「my Query」).list()。size()' 會工作,但我需要在沒有實際執行查詢的情況下完成。 – KalpaG 2012-03-13 12:12:24

0

使用此選擇(它也應該在HQL工作)

select count(distinct t.divisionId,t.userId,t.projectId,t.roleId) from TimeSheetsWork t where t.divisionId in :_divisions 

通過這種方式,只有在t.divisionId,t.userId,t.projectId,t.roleId列沒有空值的情況下才能正常工作。如果他們中的一些有你可以欺騙和使用該語句空值(在本例中只有角色ID可以爲null):

(的
select count(distinct t.divisionId,t.userId,t.projectId, coalesce(t.roleId, -1)) from TimeSheetsWork t where t.divisionId in :_divisions 

,而不是-1你可以用任意值,但不能顯示爲真正的角色Id)。

然後你在HQL中使用這個查詢,你會得到一個包含count作爲查詢結果的值。