2015-07-03 1 views
1

Я перехожу приложение Grails от 2.2.4 до 2.5.0, и от Hibernate 3 до Hibernate 4.Использование статического метода в Grails/Горм FindAll закрытия

Существует существующий GORM findAll запрос, который пропускает java.util.Date (домен start) объекта домена для вызова статического метода, который возвращает копию 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, поэтому общее решение этой проблемы по-прежнему будет полезно.

+0

Вы должны также показать, как 'start' будет организовано, чтобы выяснить, почему это жалуются, что будучи' DetachedCriteria ' – dmahapatro

+0

Что вы подразумеваете под словом" how' start' "? '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()