Подтвердить что ты не робот

Как использовать текущую дату в запросе 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-запрос?

4b9b3361

Ответ 1

Разве это не должно быть 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_TIME | CURRENT_TIMESTAMP Функции даты и времени вернуть значение текущей даты, времени и метки времени в базе данных сервер.

Ответ 2

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

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

where alert.expiration > sysdate 

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

where alert.expiration > trunc(sysdate)