Je suis sûr que quelqu'un de familier avec HQL (je suis moi-même un débutant) peut facilement répondre à cette question.Comment interroger une date dans HQL (Hibernate) avec Joda Time?
Dans mon application Grails, j'ai la classe de domaine suivante.
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
Dans ma requête HQL, je veux récupérer des livres dont la date de sortie est inclus dans la gamme date1
.. date2
Par exemple, j'ai essayé:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
Mais je suis arrivé à l'exception ...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
Le jeton d'erreur pointe vers le format de date (par exemple 2009-11-27T21:57:18.010+01:00
ou Fri Nov 27 22:01:20 CET 2009
)
J'ai également essayé de convertir date1 en classe Date sans succès
Alors, quel est le code HQL correct? Dois-je convertir en un format spécifique (lequel?) En utilisant la méthode patternForStyle ou y a-t-il un autre moyen plus propre de le faire?
Merci,
Fabien.
Comment est-ce que org.joda.time.DateTime correspond à votre SQL? Est-ce directement sur le terrain? java.util.Date et java.util.Calendar peuvent être mappés directement à un champ de base de données. Pour ce que ça vaut, puisque DateTime est un objet agrégé, le plugin Grails utilise probablement sous les couvertures un type de mapping personnalisé (voir la section 5.3 de Java Persistence with Hibernate). – Alan
Comme indiqué dans le commentaire du code, DateTime utilise le type de mappage personnalisé PersistentDateTime de la bibliothèque joda-time-hibernate – fabien7474