Bestellung von Spalten in JPQL / Hibernate unterschiedlichen
Frage
Ich habe eine Tabelle von Sessions haben. Jede Sitzung hat „session_start_time“ und „session_end_time“. Während die Sitzung geöffnet ist, ist die Endzeit leer. Ich will die Liste der Sitzungen holen, und um es durch die folgende Logik:
- Wenn die Sitzung geöffnet ist (keine Endzeit), um die Startzeit.
- Wenn die Sitzung geschlossen wird, um die Endzeit.
So etwas wie:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
Ich bin mit JPA und JPQL für die Abfragen, und mit Hibernate für die Ausführung. Was würden Sie empfehlen?
Hinweis : Ich würde lieber nicht CASE SELECT hinzufügen, aber es stattdessen sauber halten, damit ich eine Liste der Sitzungen ohne zusätzliche nicht benötigten Felder erhalten.
Lösung
ORDER BY NVL (session_end_time, session_start_time)
NVL ist eine Oracle-Funktion. Ich bin sicher, Ther sind Funktionen wie die für andere DBMS
Gefunden dieses für Hibernate: NVL in HIBERNATE: wie Simulieren NVL in HQL
ORDER BY: https://forum.hibernate.org/ viewtopic.php? f = 25 & t = 997220 & start = 0
Andere Tipps
Does
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
Arbeit in Ihrem DBMS? Hinzufügen, dass kein Feld.
Ansonsten kann man es sich in einer verschachtelten Abfrage berechnen, aber es nicht in der endgültigen SELECT
-Klausel:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield