2009-02-04 5 views
24

Я пытаюсь написать этот запрос, используя Hibernate 3 и Oracle 10.Как использовать текущую дату в запросе HQL с базой данных Oracle?

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 

я получаю все эти дурацкие ошибки, как «отсутствует право скобки ", когда есть, по-видимому, совершенно сбалансированная скобка.

Почему Оракул? Есть ли лучший способ написать мой HQL-запрос?

ответ

36

Не должна ли она быть current_date?

Hibernate переведет его на соответствующий диалект.

Я не нашел реального «Hibernate переведет это в эту» справочную документацию, но выражение, в общем, можно найти в HQL Expressions for Hibernate 4.3.

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

4.6.17.2.3 Функции functions_returning_datetime кодировки даты: = CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP Функции datetime возвращают значение текущей даты, времени и метки времени в базе данных .

4

Есть current_date() a Hibernate функция?

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

where alert.expiration > sysdate 

Или игнорировать время дня:

where alert.expiration > trunc(sysdate) 
+1

Current_date и Current_timestamp - это функции Oracle. Current_date = Sysdate, но Oracle не нуждается() после вызова функции. – 2009-02-05 21:32:36

+7

CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP() также являются Hibernate HQL функциями. («Java Persistence With Hibernate») –

+0

просто передайте CURRENT_DATE() в вашем запросе, например, например: «и date = CURRENT_DATE()»; –

 Смежные вопросы

  • Нет связанных вопросов^_^