在 Grails / GORM findAll 闭包中使用静态方法
Using static method in Grails / GORM findAll closure
我正在将 Grails 应用程序从 2.2.4 升级到 2.5.0,从 Hibernate 3 升级到 Hibernate 4。
有一个现有的 GORM findAll
查询将域对象的 java.util.Date
属性(名为 start
)传递给静态方法的调用 returns 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()
我正在将 Grails 应用程序从 2.2.4 升级到 2.5.0,从 Hibernate 3 升级到 Hibernate 4。
有一个现有的 GORM findAll
查询将域对象的 java.util.Date
属性(名为 start
)传递给静态方法的调用 returns 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()