2013-10-01 28 views
0

在域中的對象,這是我的數據結構的相關片斷和約束阻止的Grails - 更新域對象有一個空日期

Date printed 

static constraints = 
{ 
    printed (Display:false, nullable:true)  
} 

,然後我寫了這個方法

def resetPrinted() 
{ 
    printed = null 
    save() 
} 

當我執行該方法時,printed被設置爲當前日期,而不是空值。

我發現有相當多的人抱怨這個問題,但我還沒有找到一個實際的解決方案。這是我到目前爲止已經發現:

http://jira.grails.org/browse/GRAILS-6943

http://grails.1312388.n4.nabble.com/Grails-1-3-4-won-t-accept-null-dates-td2322178.html

http://java.dzone.com/tips/null-value-save-issue-grails

http://jira.grails.org/browse/GRAILS-7189

我使用Grails 2.2.4。如果這在2.3.0中已經被固定了,我會升級,但是否則我不會。

+0

它在通過控制檯2.2.4測試按預期工作。你的實現是怎樣的? – dmahapatro

+0

dmahapatro,你是對的,這不是真的問題。我沒有注意到'beforeUpdate()'方法也在改變'打印'。我是否應該刪除這個問題,因爲它變得毫無用處,並且只會分散給未來的讀者? – howrad

+0

我建議你添加一個答案,無論你面對和發現(如何以及爲什麼'beforeUpdate()')阻止你,並接受答案。 – dmahapatro

回答

0

事實證明,我沒有注意到beforeUpdate()方法的存在,該方法被稱爲setStatusDate()。這是該方法的相關章節:

def setStatusDate() 
{ 
    def now = new Date() 
    ... 
    else if(status == Status.PRINTED) 
     printed = now 
    ... 
} 

所以resetPrinted()被設置爲null,但更新正好發生之前,beforeUpdate()被觸發,這叫做setStatusDate(),並將其設置回now

結論:如果數據行不通了,檢查了這些方法的存在:beforeInsert, beforeUpdate, beforeDelete, beforeValidate, afterInsert, afterUpdate, afterDelete,onLoad