Wie verwende ich das aktuelle Datum in einer HQL-Abfrage mit einer Oracle-Datenbank?

StackOverflow https://stackoverflow.com/questions/513317

  •  21-08-2019
  •  | 
  •  

Frage

Ich versuche, diese Abfrage zu schreiben, mit Hibernate 3 und Oracle 10.

from Alert alert
where alert.expiration > current_date()
order by alert.priority, alert.updated, alert.name

Es ist die Schaffung SQL so -

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

Ich bin all diese verrückten Fehler wie „fehlende rechte Klammer“ bekommen, wenn es scheinbar perfekt ausbalancierten Klammer ist.

Warum ist freaking Oracle auf diese aus? Gibt es einen besseren Weg, um meine HQL Abfrage zu schreiben?

War es hilfreich?

Lösung

Sollte es nicht current_date werden?

Hibernate wird es auf den richtigen Dialekt übersetzen.

Ich fand keine wirkliche Dokumentation Referenz „Hibernate dies, dass übersetzen wird“, aber der Ausdruck in der Regel in HQL Ausdrücke für Hibernate 4.3 .

Dann gibt es die Java Persistence API 2.0 (JPA) Spezifikation, die definiert, Ausdrücke für die Java Persistence Query language (JPQL) und deren Bedeutung zB für current_date:

  

4.6.17.2.3 für Datum und Uhrzeit Funktionen functions_returning_datetime: = CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP Die Datetime-Funktionen   geben den Wert des aktuellen Datums, der Uhrzeit und Zeitstempel auf der Datenbank   Server.

Andere Tipps

Ist current_date() eine Hibernate-Funktion?

würde ich sysdate stattdessen verwenden. wie folgt aus:

where alert.expiration > sysdate 

oder Tageszeit zu ignorieren:

where alert.expiration > trunc(sysdate) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top