【问题标题】:CASE statement in HQL or CriteriaHQL 或 Criteria 中的 CASE 语句
【发布时间】:2011-10-27 10:31:08
【问题描述】:

派生自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

尽管 google 提出了一些 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

由于可能有很多类型,这可能会很慢。我希望数据库为我完成这项工作。

【问题讨论】:

    标签: java sql hql criteria-api


    【解决方案1】:

    嗯,似乎支持 case 语句:

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

    它们似乎在 count() 中不起作用。另一种方法是使用 sum(case when... then 1 else 0 end) instead

    【讨论】:

    • 谢谢,这让我免于发疯。这是bug report。它已经多年了,但仍未解决......
    • 我们可以使用条件查询吗??
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多