Как использовать текущую дату в запросе HQL с базой данных Oracle? - PullRequest
31 голосов
/ 04 февраля 2009

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

Ответы [ 2 ]

47 голосов
/ 05 февраля 2009

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

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

Я не нашел настоящего "Hibernate" переведет это на "справочную документацию, но выражение, как правило, можно найти в HQL Expressions для 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_TIME | CURRENT_TIMESTAMP Функции даты и времени вернуть значение текущей даты, времени и метки времени в базе данных сервер.

7 голосов
/ 05 февраля 2009

Является ли current_date() функцией гибернации?

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

where alert.expiration > sysdate 

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

where alert.expiration > trunc(sysdate) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...