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