2009-10-28 23 views
7

¿Alguien me puede indicar un ejemplo sobre cómo usar CURRENT_DATE en una consulta JPA?Ejemplo de uso del CURRENT_DATE en la consulta JPA

CURRENT_DATE está especificado en JPA pero no he podido hacerlo funcionar. Siempre obtengo la excepción unexpected token [CURRENT_DATE]. Como está especificado en JPA, todos los proveedores deben cumplirlo ¿no?

Estoy usando EclipseLink 2.0 BTW.

Respuesta

12

Se puede utilizar de este modo:

Query query = manager 
    .createQuery("SELECT c FROM CITIES c WHERE c.founded = CURRENT_DATE"); 
for (Object city : query.getResultList()) { 
    System.out.println(city); 
} 

... donde fundó es un tipo temporal:

@Column(name = "FOUNDED") 
    @Temporal(TemporalType.DATE) 
    private Date founded = new Date(); 

No un gran ejemplo, pero se entiende la idea. Estoy usando Eclipselink 1.1.2

+0

Estás muy cerca. Llegué tan lejos justo antes de ver tu respuesta. Intento hacer algo como Seleccionar x de la Tabla x donde x.id = 1 y (x.lastModified-CURRENT_DATE)> = 365 Necesito usar el cálculo en las fechas. – javydreamercsw

+0

¿Es posible hacer aritmética de fecha y hora usando JPA? Tendría que tener alguna función para convertir la diferencia en días (y no en minutos, meses o milenios, etc.). No estoy al tanto de tales funciones. Haga la aritmética de fecha en Java y luego simplemente seleccione comparando con el rango resultante. – McDowell

+0

Supongo que esto es un defecto o una funcionalidad faltante de JPA. Tendré que hacerlo de esa manera, supongo. ¡Gracias! – javydreamercsw

3

Si está utilizando el Expression Framework existe el método Expression currentDateDate() en el objeto Expression (org.eclipse.persistence.expressions.Expression).

+0

Voy a tener que intentarlo, pero realmente estaba tratando de evitar el uso de consultas genéricas de JPA para evitar la dependencia del proveedor de persistencia. – javydreamercsw

4

La respuesta a esta pregunta fue recuperar los valores a través de JPA y luego hacer los cálculos en Java simple.

Cuestiones relacionadas