我正在将Grails应用程序从2.2.4升级到2.5.0,并且从Hibernate 3升级到Hibernate 4。
有一个现有的GORM findAll
查询,该查询将域对象的java.util.Date
属性(名为start
)传递给对静态方法的调用,该方法返回去除了时间成分的Date
的副本。
这是findAll
调用的简化版本(不包括引发异常的条件)。
Reservation.findAll {
DateUtils.justDate(start) == DateUtils.justDateToday()
}
它在2.2.4中无任何异常地运行,但是在2.5.0中,它抛出
GroovyCastException
,表明start
是grails.gorm.DetachedCriteria
,并且不能转换为java.util.Date
。如何使查询正常工作?
我可以使用类似:
Reservation.findAll {
start >= DateUtils.justDateToday() &&
start < DateUtils.justDateTomorrow()
}
但这似乎不雅。同样,域对象属性可能在其他
findAll
闭包中用作静态方法的参数,因此,此问题的通用解决方案仍然有用。
最佳答案
使用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()
关于hibernate - 在Grails/GORM中使用静态方法findAll关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210697/