JPQL/Hibernate でのさまざまな列による順序付け
質問
セッションのテーブルがあります。各セッションには「session_start_time」と「session_end_time」があります。セッションが開いている間は、終了時刻は空です。セッションのリストを取得し、次のロジックに従って並べ替えたいと考えています。
- セッションが開いている場合(終了時間なし)、開始時間までに注文してください。
- 終了時間の場合は終了時間までにご注文ください。
何かのようなもの:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
クエリには JPA と JPQL を使用し、実行には Hibernate を使用しています。あなたは何をお勧めします?
注記:CASE を SELECT に追加するのではなく、不要なフィールドを追加せずにセッションのリストを取得できるように、SELECT をクリーンな状態に保ちたいと考えています。
解決
NVL BY ORDER(session_end_time、session_start_time)
NVLはOracleの機能です。私は他のDBMSのためにそのような機能があるTHER確信している。
休止状態のため、この1が見つかりました: HIBERNATEでNVL: HQL の
でNVLをシミュレートする方法ORDER BY: https://forum.hibernate.org/ viewtopic.php?F = 25&T = 997220&スタート= 0 の
他のヒント
ない
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
あなたのDBMSで仕事?これは、フィールドを追加しません。
それ以外の場合は、あなたがネストされたクエリ内でそれを計算することができますが、最終SELECT
句の中に含まれていません。
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
所属していません StackOverflow