2011-08-15 22 views
6

derivado de this question, es posible el uso de HQL o criterios para la siguiente instrucción SQL:instrucción CASE en HQL o Criteria

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 

Aunque Google viene con algunos golpes ese estado HQL soporta instrucciones CASE, Hibernate 3.6.6 falla con un QuerySyntaxException

: símbolo inesperado: CASO

cuando se crea la consulta anterior en una instancia de EntityManager.

¿Qué tan mala idea es crear otra consulta para cada e.type para determinar el número de hombres manualmente, p. para cada e.tipo

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

Dado que podría haber bastantes tipos, esto es potencialmente lento. Me gustaría que la base de datos haga el trabajo por mí.

Respuesta

11

Bueno, al parecer, las declaraciones de caso son compatibles:

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

Ellos simplemente no parecen trabajar dentro de recuento(). Una alternativa sería usar la suma (caso cuando ... luego 1 else 0 final) instead

+0

Gracias, esto me salvó de volverme loco. Aquí está el [informe de error] (https://hibernate.onjira.com/browse/HHH-4150). Tiene años, pero aún no se ha resuelto ... –

+1

¿Podemos hacerlo usando la consulta Criteria? –

+0

También funciona con la API de Criteria. – gillesB

Cuestiones relacionadas