この状況を考えてみましょう: 私はレッスンのテーブルを持っています。すべてのレッスンには曜日 (0-6; 日付ではありません) とレッスンが開催されるレッスン時間 (時間ではなく、1 日のレッスンのシーケンス番号) があります。 、すなわち 1 から 10)。そして、特定の日と時間の後の最初のレッスンを見つける必要があります。
これらのレッスン (1 日の時間) を考えると: monday-5、wednesday-2、friday-1、friday-3。
水曜日-2 の後のレッスンでは、金曜日-1、金曜日-2 の後に金曜日-3、金曜日-5 の後に月曜日-5 などを受け取ります。そのため、週末にかけて「オーバーフロー」します。
Hibernate HQL を使用したあるプロジェクトでは、次のクエリで解決しました。
SELECT l FROM Lesson l
ORDER BY (l.day > :day OR (l.day = :day AND l.hour >= :hour)),
l.day DESC, l.hour DESC LIMIT 1
驚いたことに、これは本当にうまくいきましたが、どうやって思いついたのか覚えていません。それは本当の魔法です。
しかし今、JPA と Hibernate を使用する別のプロジェクト (今回は Java EE Web ベース) でそれを行う必要があります。同じように機能すると考えて (Hibernate と HQL を再度使用)、例外をスローします。
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: OR near line 1, column 101
ORDER BY 句の OR を指します。
ORDER BY 内の OR は本当にぎこちないことはわかっていますが、うまくいったので、問題ないと思いました。でも今はどうしたらいいのかわからない。Hibernate のバージョンが異なるためか、JPA を使用している可能性がありますか? (バージョンについてはわかりません。どちらも Hibernate 3 です)。どちらのデータベースも MySQL でした。
助けてくれてありがとう(または指定どおりに機能する別のクエリを提供してください)。