Sono sicuro che qualcuno che abbia familiarità con HQL (io stesso sono un principiante) può facilmente rispondere a questa domanda.Come interrogare una data in HQL (Hibernate) con Joda Time?
Nella mia applicazione Grails, ho la seguente classe di dominio.
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
Nella mia interrogazione HQL, voglio recuperare i libri la cui data di uscita è incluso nella gamma date1
.. date2
Per esempio ho provato:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
Ma ho avuto l'eccezione ...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
Il token di errore indica il formato della data (ad esempio 2009-11-27T21:57:18.010+01:00
o Fri Nov 27 22:01:20 CET 2009
)
Ho anche provato a convertire date1 in una classe Date senza successo
Quindi qual è il codice HQL corretto? Devo convertire in un formato specifico (quale?) Usando il metodo patternForStyle o c'è un altro modo -cleaner- per farlo?
Grazie,
Fabien.
Come funziona org.joda.time.DateTime al tuo SQL? È direttamente sul campo? java.util.Date e java.util.Calendar possono mappare direttamente a un campo di database. Per quello che vale, dato che DateTime è un oggetto aggregato, il plugin di Grails probabilmente usa sotto le copertine un tipo di mappatura personalizzato (vedi il paragrafo 5.3 di Java Persistence con Hibernate). – Alan
Come indicato nel commento del codice, DateTime utilizza il tipo di mapping personalizzato PersistentDateTime dalla libreria joda-time-hibernate – fabien7474