HQL或Criteria中的CASE语句

时间:2011-08-15 17:02:09

标签: java sql hql criteria-api

派生自this question,是否可以将HQL或Criteria用于以下SQL语句:

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语句的点击,但Hibernate 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

由于可能有不少类型,这可能很慢。我想数据库为我做的工作。

1 个答案:

答案 0 :(得分:11)

好吧,似乎支持案例陈述:

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html

他们似乎没有在count()内工作。另一种方法是使用sum(情况是......然后其他0结束)instead