получено из этого вопроса , возможно ли использовать HQL или критерии для следующего оператора 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
Поскольку может быть довольно много типов, это потенциально медленно. Я бы хотел, чтобы база данных сделала всю работу за меня.