hibernate - 在Grails/GORM中使用静态方法findAll关闭

标签 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)传递给对静态方法的调用,该方法返回去除了时间成分的Date的副本。

这是findAll调用的简化版本(不包括引发异常的条件)。

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

它在2.2.4中无任何异常地运行,但是在2.5.0中,它抛出GroovyCastException,表明startgrails.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/

相关文章:

java - 忽略乐观锁定

java - 获取列名以及 JSON 响应

Grails - Controller 和 View 之间的通信

Grails Controller 传递参数

hibernate - Hibernate注释的Java POJO中的Grails应用程序

grails - 更新数据库记录

java - 如何减少hibernate搜索(lucene)中的结果集?

unit-testing - Grails 2.0:发布测试flash.message

grails - 如何在Grails中定义关联关系

mysql - Grails DetachedCriteria 使用 'where' 抛出 SyntaxErrorException