Oracle データベースの HQL クエリで現在の日付を使用するにはどうすればよいでしょうか? 質問する

Oracle データベースの HQL クエリで現在の日付を使用するにはどうすればよいでしょうか? 質問する

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 日時関数は、データベース サーバー上の現在の日付、時刻、およびタイムスタンプの値を返します。

おすすめ記事