web-dev-qa-db-ja.com

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クエリを記述するより良い方法はありますか?

33
bpapa

current_dateであってはなりませんか?

Hibernateはそれを適切な方言に変換します。

本当の「Hibernateはこれをそれに変換する」参照ドキュメントを見つけませんでしたが、式は一般に、 Hibernate 4.3 のHQL Expressionsにあります。

次に、 Java Persistence API 2.0(JPA) 仕様があります。これは、Java Persistence query language(JPQL)の式とその意味を定義します。 current_date

4.6.17.2.3日時関数functions_returning_datetime:= CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP datetime関数は、データベースサーバーの現在の日付、時刻、およびタイムスタンプの値を返します。

48
Michael Pralow

current_date()はHibernate関数ですか?

代わりにsysdateを使用します。このような:

where alert.expiration > sysdate 

または、時刻を無視するには:

where alert.expiration > trunc(sysdate) 
8
Lost in Alabama