【发布时间】:2010-12-23 10:08:03
【问题描述】:
相信熟悉HQL的人(我自己也是新手)可以轻松回答这个问题。
在我的 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)
我也尝试将 date1 转换为 Date 类,但没有成功
那么正确的 HQL 代码是什么?我应该使用 patternForStyle 方法转换为特定格式(哪一种?)还是有另一种 -cleaner- 方法可以做到这一点?
谢谢,
法比恩。
【问题讨论】:
-
org.joda.time.DateTime 如何映射到您的 SQL?是直接到外地吗? java.util.Date 和 java.util.Calendar 可以直接映射到数据库字段。值得一提的是,由于 DateTime 是一个聚合对象,Grails 插件可能正在使用自定义映射类型(参见 Java Persistence with Hibernate 的第 5.3 节)。
-
如代码注释中所述,DateTime 使用的是来自 joda-time-hibernate 库的 PersistentDateTime 自定义映射类型
标签: hibernate orm grails hql jodatime