HQL或Criteria中的CASE语句

Cla*_*den 6 java sql hql criteria-api

这个问题派生出来,是否可以将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
Run Code Online (Sandbox Code Playgroud)

虽然谷歌提出了一些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
Run Code Online (Sandbox Code Playgroud)

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

Cla*_*den 11

好吧,似乎支持case语句:

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

他们似乎没有在count()内工作.另一种方法是使用和(情况下,当...然后1个否则为0端)代替

  • 我们可以使用Criteria查询吗? (2认同)