2015-07-03 93 views
1

我升级一个Grails应用从2.2.4至2.5.0和从休眠3休眠4.Grails中/ GORM的findAll闭合使用静态方法

有一个现有的GORM findAll查询传递一个java.util.Date域对象的属性(名为start)与对静态方法的调用有关,该静态方法返回Date的副本并剥离时间组件。

这里的findAll通话的简化版本(不低于抛出异常的另一个条件):

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

这将运行没有任何2.2.4异常,但在2.5.0,它抛出GroovyCastExceptionstartgrails.gorm.DetachedCriteria,并且不能投射到java.util.Date

如何让查询生效?

我可以使用类似:

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

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

+0

你必须也显示start'是如何'策划弄清楚它为什么抱怨它是一个'的DetachedCriteria ' – dmahapatro

+0

你是什么意思“如何开始'是精​​心策划的”? 'start'是一个标准的GORM域对象属性,声明如下:'Date start'。这是你正在寻找的信息吗? – XDR

+0

'start'也有以下GORM约束:'start validator:{val,obj - >!val || !obj.end || val XDR

回答

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