Commande en faisant varier les colonnes de JPQL / Mise en veille prolongée
Question
J'ai une table des sessions. Chaque session a "session_start_time" et "session_end_time". Bien que la séance est ouverte, l'heure de fin est vide. Je veux aller chercher la liste des sessions, et l'ordre par la logique suivante:
- Si la session est ouverte (pas de fin), pour le temps de démarrage.
- Si la session est fermée, commande par la fin des temps.
Quelque chose comme:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
J'utilise JPA et JPQL pour les requêtes, et l'utilisation d'Hibernate pour l'exécution. Que recommanderiez-vous?
NOTE : Je préfère ne pas ajouter à la CASE SELECT, mais plutôt le garder propre donc j'obtenir une liste des sessions sans champs supplémentaires non nécessaires.
La solution
ORDER BY nvl (session_end_time, session_start_time)
NVL est une fonction Oracle. Je suis sûr que ther sont des fonctions comme pour les autres SGBD
trouvé celui-ci pour mise en veille prolongée: NVL à HIBERNATE: Comment simuler NVL dans HQL
ORDER BY: https://forum.hibernate.org/ viewtopic.php? f = 25 & t = 997220 & start = 0
Autres conseils
Est
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
travail dans votre SGBD? Cela n'ajoute un champ.
Sinon, vous pouvez le calculer dans une requête imbriquée, mais ne pas inclure dans la clause de SELECT
final:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield