Я уверен, что кто-то, знакомый с HQL (я сам новичок), может легко ответить на этот вопрос.Как запросить дату в HQL (Hibernate) с Joda Time?
В моем приложении Grails у меня есть следующий класс домена.
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
В моем HQL запрос, я хочу, чтобы получить книги, чьи дата выпуска входит в диапазон date1
.. date2
Например, я попробовал:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
Но я получил исключение ...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
Формат маркеров ошибок в формате даты (например, 2009-11-27T21:57:18.010+01:00
или Fri Nov 27 22:01:20 CET 2009
)
Я также попытался преобразовать дату1 в класс даты без успеха
Так что же такое правильный код HQL? Должен ли я конвертировать в конкретный формат (какой?) С использованием метода patternForStyle или есть другой способ очистки?
Thanks,
Fabien.
Как карта org.joda.time.DateTime на ваш SQL? Это прямо на поле? java.util.Date и java.util.Calendar могут непосредственно сопоставляться с полем базы данных. Для чего это стоит, так как DateTime является агрегированным объектом, плагин Grails, вероятно, использует под обложками настраиваемый тип сопоставления (см. Раздел 5.3 Java Persistence with Hibernate). – Alan
Как указано в комментарии к коду, DateTime использует настраиваемый тип сопоставления PersistentDateTime из библиотеки joda-time-hibernate – fabien7474