Estoy seguro de que alguien familiarizado con HQL (soy un novato) puede responder fácilmente a esta pregunta.¿Cómo consultar una fecha en HQL (Hibernar) con Joda Time?
En mi aplicación Grails, tengo la siguiente clase de dominio.
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
En mi consulta HQL, quiero recuperar libros cuya fecha de lanzamiento está incluida en el rango date1
.. date2
Por ejemplo Traté:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
Pero tengo la excepción ...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
El token de error señala el formato de fecha (por ejemplo 2009-11-27T21:57:18.010+01:00
o Fri Nov 27 22:01:20 CET 2009
)
También intenté convertir date1 en una clase Date sin éxito
¿Cuál es el código HQL correcto? ¿Debería convertir a un formato específico (¿cuál?) Usando el método patternForStyle o ¿hay alguna otra forma más clara de hacerlo?
Gracias,
Fabien.
¿Cómo se relaciona org.joda.time.DateTime con su SQL? ¿Está directamente al campo? java.util.Date y java.util.Calendar pueden asignarse directamente a un campo de base de datos. Por lo que vale, dado que DateTime es un objeto agregado, el plugin de Grails probablemente esté utilizando debajo de las cubiertas un tipo de mapeo personalizado (ver sec 5.3 de Java Persistence con Hibernate). – Alan
Como se indica en el comentario del código, DateTime utiliza el tipo de asignación personalizada PersistentDateTime de la biblioteca joda-time-hibernate – fabien7474