Hibernate 3 と Oracle 10 を使用してこのクエリを記述しようとしています。
from Alert alert
where alert.expiration > current_date()
order by alert.priority, alert.updated, alert.name
次のようなSQLを作成します -
Hibernate: select alert0_.ANNOUNCEMENTS_ID as ANNOUNCE1_1_, alert0_.ANNOUNCEMENT
S_NAME as ANNOUNCE2_1_, alert0_.ANNOUNCEMENTS_PRIORITY as ANNOUNCE3_1_, alert0_.
ANNOUNCEMENTS_EXPIRATION as ANNOUNCE4_1_, alert0_.ANNOUNCEMENTS_UPDATE_DATE as A
NNOUNCE5_1_ from NYC311_ANNOUNCEMENTS alert0_ where (alert0_.ANNOUNCEMENTS_EXPIR
ATION>current_date()) order by alert0_.ANNOUNCEMENTS_PRIORITY , alert0_.ANNOUNC
EMENTS_UPDATE_DATE , alert0_.ANNOUNCEMENTS_NAME
明らかに完全にバランスの取れた括弧があるのに、「右括弧がありません」などの奇妙なエラーが表示されます。
Oracle がこれに激怒するのはなぜでしょうか? HQL クエリを記述するより良い方法はあるのでしょうか?
ベストアンサー1
そうではないでしょうかcurrent_date
?
Hibernate はそれを適切な方言に翻訳します。
「Hibernateはこれをあれに変換します」という実際のリファレンスドキュメントは見つかりませんでしたが、一般的な表現は次のようになります。Hibernate 4.3 の HQL 式。
そして、Java 永続 API 2.0 (JPA)Java Persistence クエリ言語 (JPQL) の式とその意味を定義する仕様。例current_date
:
4.6.17.2.3 日時関数 functions_returning_datetime:= CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP 日時関数は、データベース サーバー上の現在の日付、時刻、およびタイムスタンプの値を返します。