L'ordinamento per colonne variabile in JPQL/Hibernate
Domanda
Ho una tabella delle Sessioni.Ogni sessione è "session_start_time" e "session_end_time".Mentre la sessione è aperta, l'ora di fine è vuoto.Voglio recuperare l'elenco delle sessioni, e l'ordine con la seguente logica:
- Se la seduta è aperta (non un fine), ordine ora di inizio.
- Se la sessione è chiusa, ordine entro la fine del tempo.
Qualcosa di simile a:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
Sto usando JPA e JPQL per le query, e l'utilizzo di Hibernate per l'esecuzione.Che cosa mi consiglia?
NOTA:Piuttosto, non vorrei aggiungere in CASO di selezione, ma invece di tenerlo pulito in modo da ottenere un elenco di sessioni senza ulteriori inutili campi.
Soluzione
ORDINE nvl(session_end_time, session_start_time)
nvl è una funzione di Oracle.Sono sicuro che ci sono funzioni come per gli altri DBMS
Trovato questo per la sospensione:nvl in SOSPENSIONE: Come simulare NVL in HQL
ORDINE: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0
Altri suggerimenti
Non
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
lavoro nel DBMS?Che non aggiunge un campo.
Altrimenti si può calcolare che all'interno di una query nidificata, ma non comprende nel finale SELECT
clausola:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield