2011-08-15 14 views
6

pochodzi od this question, jest to możliwe do wykorzystania HQL lub kryteria dla następujących instrukcji SQL:case w HQL lub kryteria

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 

Chociaż Google pojawia się z kilku hitów tego stanu HQL obsługuje instrukcje Case, Hibernate 3.6.6 nie z

QuerySyntaxException: nieoczekiwany znak: CASE

gdy tworzę powyżej zapytania w instancji EntityManager.

Ile jest złego pomysłu, aby utworzyć kolejne zapytanie dla każdego typu e.type, aby ręcznie określić liczbę samców, np. dla każdego typu e.type

SELECT 
    count(e), 
from Department d 
JOIN d.employees e 
WHERE e.dead = 'maybe', e.type = ugly 

Ponieważ może istnieć kilka typów, jest to potencjalnie powolne. Chciałbym, żeby baza danych wykonała dla mnie pracę.

Odpowiedz

11

Cóż, wydaje się, obsługiwane są stwierdzenia przypadków:

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

Oni po prostu nie wydają się działać w ciągu count(). Alternatywą byłoby użycie sumy (przypadek, gdy ... to koniec 0) instead

+0

Dzięki, to właśnie uratowało mnie przed szaleństwem. Oto [zgłoszenie błędu] (https://hibernate.onjira.com/browse/HHH-4150). Jest stary, ale wciąż nierozwiązany ... –

+1

Czy możemy to zrobić za pomocą zapytania Kryteria? –

+0

Działa również z API Criteria. – gillesB