Как использовать текущую дату в запросе HQL с базой данных Oracle?

Я пытаюсь написать этот запрос, используя 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?


person bpapa    schedule 04.02.2009    source источник


Ответы (2)


Разве это не должно быть current_date?

Hibernate переведет его на правильный диалект.

Настоящей справочной документации "Hibernate переведет это на то" я не нашел, но выражение, в общем, можно найти в Выражения HQL для Hibernate 4.3.

Затем идет спецификация Java Persistence API 2.0 (JPA), которая определяет выражения для Язык запросов Java Persistence (JPQL) и их значение, например. для current_date:

4.6.17.2.3 Функции даты и времени functions_returning_datetime:= CURRENT_DATE | ТЕКУЩЕЕ_ВРЕМЯ | CURRENT_TIMESTAMP Функции datetime возвращают значение текущей даты, времени и отметки времени на сервере базы данных.

person Michael Pralow    schedule 04.02.2009

Является ли current_date() функцией Hibernate?

Вместо этого я бы использовал sysdate. как это:

where alert.expiration > sysdate 

Или игнорировать время суток:

where alert.expiration > trunc(sysdate) 
person Lost in Alabama    schedule 04.02.2009
comment
Current_date и Current_timestamp — это функции Oracle. Current_date = Sysdate, но Oracle не нуждается () после вызова функции. - person ; 06.02.2009
comment
CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP() также являются функциями Hibernate HQL. (Сохранение Java в спящем режиме) - person Maarten van Leunen; 25.03.2012
comment
просто передайте CURRENT_DATE() в своем запросе, например: and date=CURRENT_DATE(); - person arn-arn; 14.04.2016