2016-02-21 42 views
1

首先,最重要的是,如果已經詢問了此問題,但在尋找它時找不到任何內容。在另一個計數(*)內計數(*)

我與Hibernate是一個新手,我不知道這是可以做到的,但我想翻譯從SQL下面的查詢休眠:

Select count(*) from (
    Select count(*) 
    from table 
    where field1 in (...) 
    Group by field1, field2); 

現在,我知道我可以得到第二個查詢的List並檢查它的大小,但是我想用uniqueResult()方法做到這一點,因爲它更高效。

有關如何做到這一點的任何想法? 在此先感謝!

編輯1:對不起,我忘了提及我正在嘗試使用HQL來做到這一點。

+1

可以用一個更簡單的查詢來完成:select count(distinct concat(field1,field2))from where where field1 in(...) – sagi

+0

count返回一個數,count(count)總是1,否? –

+0

@RC。不,他正在計算分組field1,field2 ..所以它的essentialy像count(選擇不同的field1,field2).. – sagi

回答

1

Hibernate does not supportfrom子句中的子查詢。你可以通過重寫查詢計數field1field2不同的拼接作爲已經@sagi在意見提出解決此,或者,如果你發現拼接的成本太高,喜歡的東西:

select count(*) from table 
where id in 
    (select max(id) from table 
    where field1 in (...) 
    group by field1, field2); 
+1

太糟糕了,你不能把子查詢放在from子句中。我想我可以通過獲得返回列表的大小或使用Native SQL查詢來解決這個問題。 – newsmail

+0

是的,它是Hibernate中最受歡迎的功能之一。希望它很快就會實施。 –

0

這將是很好如果你可以這樣做:

Select count(distinct field1, field2) 
from table 
where field1 in (...) 

但我不認爲這在Hibernate中起作用。一個解決辦法是用sepator來串聯值(如弛度在評論中提到):

Select count(distinct field1 || ':' || field2) 
from table 
where field1 in (...); 

一個注意:這個版本將會從您的原始查詢區別對待NULL值。這可以很容易地處理,但它使邏輯稍微複雜一些。

+0

這兩個答案都與我的評論相同:S – sagi