Pedidos mediante la variación de columnas en JPQL / Hibernate
Pregunta
Tengo una tabla de Sesiones. Cada sesión tiene "session_start_time" y "session_end_time". Aunque la sesión está abierta, la hora de finalización está vacía. Quiero buscar a la lista de sesiones, y el orden que por la lógica siguiente:
- Si la sesión está abierta (sin hora de finalización), ordenado por la hora de inicio.
- Si la sesión se cierra, por fin la hora de finalización.
Algo así como:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
Estoy usando JPA y JPQL para las consultas, y el uso de Hibernate para la ejecución. ¿Qué recomendaría usted?
Nota: : Yo prefiero no añadir caso a la SELECT, sino que mantenerlo limpio por lo que obtener una lista de sesiones sin campos innecesarios adicionales.
Solución
ORDER BY NVL (session_end_time, session_start_time)
NVL es una función de Oracle. Estoy seguro de que allí son funciones como la de otros DBMS
Encontrados éste para hibernación: NVL en hibernación: cómo simular NVL en HQL
ORDER BY: https://forum.hibernate.org/ viewtopic.php? f = 25 & t = 997220 & start = 0
Otros consejos
¿Tiene
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
trabajo en su DBMS? Que no añade un campo.
De lo contrario se puede calcular que el interior de una consulta anidada, pero no es necesario incluirla en la cláusula SELECT
final:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield