2009-02-04 46 views
24

estoy tratando de escribir esta consulta usando Hibernate 3 y Oracle 10.¿Cómo uso la fecha actual en una consulta HQL con una base de datos Oracle?

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

Se trata de crear SQL como esto -

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 

estoy recibiendo todos estos errores extravagantes como "right paréntesis "cuando aparentemente hay un paréntesis perfectamente equilibrado".

¿Por qué Oracle se está volviendo loco con esto? ¿Hay una mejor manera de escribir mi consulta HQL?

Respuesta

36

¿No debería ser current_date?

Hibernate lo traducirá al dialecto correcto.

No encontré una verdadera documentación de referencia "Hibernate lo traducirá a eso", pero la expresión, en general, se puede encontrar en HQL Expressions for Hibernate 4.3.

Luego está la especificación Java Persistence API 2.0 (JPA) que define expresiones para el lenguaje de consulta Java Persistence (JPQL) y su significado, p. para current_date:

4.6.17.2.3 Funciones de fecha y hora functions_returning_datetime: = CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP Las funciones de fecha y hora devuelven el valor de la fecha, hora e indicación de fecha y hora actuales en el servidor de la base de datos .

4

¿Es current_date() a Hibernate?

Yo usaría sysdate en su lugar. de esta manera:

where alert.expiration > sysdate 

O hacer caso omiso de la hora del día:

where alert.expiration > trunc(sysdate) 
+1

Current_date y Current_timestamp son funciones de Oracle. Current_date = Sysdate pero Oracle no necesita() después de una llamada de función. –

+7

CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP() son también Hibernate HQL Functions. ("Java Persistence With Hibernate") –

+0

simplemente pase CURRENT_DATE() en su consulta como por ejemplo: "and date = CURRENT_DATE()"; –

Cuestiones relacionadas