Pedidos por colunas variadas em jpql/hibernate
Pergunta
Eu tenho uma tabela de sessões. Cada sessão possui "session_start_time" e "session_end_time". Enquanto a sessão está aberta, o horário de término está vazio. Quero buscar a lista de sessões e encomendá -la pela seguinte lógica:
- Se a sessão estiver aberta (sem horário de término), encomende até o horário de início.
- Se a sessão estiver fechada, encomende até o final da hora.
Algo como:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
Estou usando o JPA e o JPQL para as consultas e usando o Hibernate para a execução. O que você recomendaria?
NOTA: Prefiro não adicionar um caso à seleção, mas mantê -lo limpo, para que eu receba uma lista de sessões sem campos desnecessários adicionais.
Solução
Ordem por nvl (session_end_time, session_start_time)
NVL é uma função Oracle. Tenho certeza de que existem funções como essa para outros DBMs
Encontrei este para Hibernate: NVL em Hibernate: Como simular o NVL no HQL
ORDENAR POR: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0
Outras dicas
Faz
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
trabalhar no seu DBMS? Isso não adiciona um campo.
Caso contrário, você pode calculá -lo dentro de uma consulta aninhada, mas não a inclua na final SELECT
cláusula:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield