在Grails / GORM中使用静态方法findAll闭包

时间:2015-07-03 16:02:14

标签: hibernate grails gorm grails-2.2 grails-2.5

我正在将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() } 表示GroovyCastExceptionstart,并且无法强制转换为{{ 1}}。

如何让查询正常工作?

我可以使用类似的东西:

grails.gorm.DetachedCriteria

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

1 个答案:

答案 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()