Заказ, различные колонны в JPQL / Hibernate
Вопрос
У меня есть стол сеансов. Каждое сеанс имеет «Session_Start_Time» и «Session_end_Time». Пока сеанс открыт, время окончания пусто. Я хочу получить список сессий и заказывать его по следующей логике:
- Если сеанс открыт (нет времени окончания), порядок к началу времени.
- Если сеанс закрыт, порядок к концу времени.
Что-то типа:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
Я использую JPA и JPQL для запросов и используя Hibernate для выполнения. Что бы вы порекомендовали?
ПРИМЕЧАНИЕ: Я предпочел бы не добавить корпус к выбору, но вместо этого держите его в чистоте, поэтому я получаю список сеансов без дополнительных ненужных полей.
Решение
Заказ от NVL (Session_end_time, Session_start_time)
NVL - функция Oracle. Я уверен, что есть такие функции для других СУБД
Нашел этот для Hibernate: NVL в Hibernate: Как имитировать NVL в HQL
СОРТИРОВАТЬ ПО: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0.
Другие советы
Делает
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
Работа в вашем СУБД? Это не добавляет поле.
В противном случае вы можете рассчитать его внутри вложенного запроса, но не включайте его в финал SELECT
пункт:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield