1

我正在将 Grails 应用程序从 2.2.4 升级到 2.5.0,并从 Hibernate 3 升级到 Hibernate 4。

有一个现有的 GORMfindAll查询将域对象的java.util.Date 属性(名为)传递给对静态方法的调用,该方法返回除去时间组件start的副本。Date

这是findAll调用的简化版本(不包括引发异常的标准以外的标准):

Reservation.findAll {
    DateUtils.justDate(start) == DateUtils.justDateToday()
}

这在 2.2.4 中没有任何异常运行,但是在 2.5.0 中,它抛出了一个GroovyCastException说法,start即 a grails.gorm.DetachedCriteria,并且不能强制转换为java.util.Date

我怎样才能让查询工作?

我可以使用类似的东西:

Reservation.findAll {
    start >= DateUtils.justDateToday() &&
    start <  DateUtils.justDateTomorrow()
}

但这似乎不优雅。此外,域对象属性可能会用作其他findAll闭包中静态方法的参数,因此该问题的通用解决方案仍然有用。

4

1 回答 1

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()
于 2015-07-03T17:35:52.203 回答