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クエリを記述するより良い方法はありますか?
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関数は、データベースサーバーの現在の日付、時刻、およびタイムスタンプの値を返します。
current_date()
はHibernate関数ですか?
代わりにsysdate
を使用します。このような:
where alert.expiration > sysdate
または、時刻を無視するには:
where alert.expiration > trunc(sysdate)