2015-07-03 20 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()