2011-08-15 43 views
6

this question的衍生產品,它可以使用HQL或條件爲下面的SQL語句:儘管谷歌來了CASE語句或者指標

SELECT 
    e.type, 
    count(e), 
    count(d), 
    count (case when gender = 'male' then 1 else NULL end) AS NumberOfMaleEmployees 
from Department d 
JOIN d.employees e 
WHERE e.dead = 'maybe' 
GROUP BY e.type 

有幾命中那個狀態HQL支持CASE語句,休眠3.6.6失敗,並

QuerySyntaxException:意外的標記:CASE

當我創建上面的查詢在一個EntityManager實例上。

有多少壞主意,爲每個e.type創建另一個查詢以手動確定男性的數量,例如,對於每個e.type

SELECT 
    count(e), 
from Department d 
JOIN d.employees e 
WHERE e.dead = 'maybe', e.type = ugly 

由於可能有相當多的類型,這可能很慢。我希望數據庫爲我完成這項工作。

回答

11

好,看來,支持case語句:

​​

他們只是似乎不計數範圍內工作()。另一種方法是使用總和(case when ... then 1 else 0 end)instead

+0

謝謝,這只是讓我從瘋了。這是[錯誤報告](https://hibernate.onjira.com/browse/HHH-4150)。它已經有幾年了,但仍然沒有解決... –

+1

我們可以使用Criteria查詢嗎? –

+0

它也適用於Criteria API。 – gillesB