Упорядочение по различным столбцам в JPQL / Hibernate - PullRequest
3 голосов
/ 17 ноября 2010

У меня есть таблица сессий.Каждый сеанс имеет «session_start_time» и «session_end_time».Пока сеанс открыт, время окончания пустое.Я хочу получить список сеансов и упорядочить его по следующей логике:

  1. Если сеанс открыт (без времени окончания), упорядочить по времени начала.
  2. Еслисессия закрыта, порядок по времени окончания.

Что-то вроде:

 ORDER BY (session_end_time == null) ? session_start_time : session_end_time

Я использую JPA и JPQL для запросов и использую Hibernate для выполнения.Что бы вы порекомендовали?

ПРИМЕЧАНИЕ : Я бы предпочел не добавлять CASE в SELECT, а поддерживать его в чистоте, чтобы получить список сеансов без дополнительных ненужных полей.

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

ORDER BY nvl (session_end_time, session_start_time)

nvl - это функция Oracle.Я уверен, что такие функции есть для других СУБД

Нашел этот для hibernate: nvl в HIBERNATE: Как смоделировать NVL в HQL

ORDER BY: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0

1 голос
/ 17 ноября 2010

ли

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...