我正在将Grails应用程序从2.2.4升级到2.5.0,从Hibernate 3升级到Hibernate 4。
现有的GORM findAll
查询将域对象的java.util.Date
属性(名为start
)传递给静态方法的调用,该方法返回{{{ 1}}时间组件被剥离。
以下是Date
调用的简化版本(不包括抛出异常的标准除外):
findAll
这在2.2.4中没有任何例外,但是在2.5.0中,它会抛出Reservation.findAll {
DateUtils.justDate(start) == DateUtils.justDateToday()
}
表示GroovyCastException
是start
,并且无法强制转换为{{ 1}}。
如何让查询正常工作?
我可以使用类似的东西:
grails.gorm.DetachedCriteria
但这似乎不够优雅。此外,域对象属性可能会用作其他java.util.Date
闭包中静态方法的参数,因此这个问题的通用解决方案仍然有用。
答案 0 :(得分:0)
使用where
查询,您可以使用date()
,month()
和year()
等方法,如下所示:
import static java.util.Calendar.*
Date today = new Date()
Reservation.where {
year(start) == today[YEAR] &&
month(start) == today[MONTH] &&
day(start) == today[DAY_OF_MONTH]
}.list()