在域对象中,这是我的数据结构和约束块的相关片段
Date printed
static constraints =
{
printed (Display:false, nullable:true)
}
然后我写了这个方法
def resetPrinted()
{
printed = null
save()
}
当我执行该方法时,printed
被设置为当前日期,而不是null。
我发现有相当多的人抱怨这个问题,但我还没有找到一个实际的解决方案。这是我到目前为止所发现的:
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 :(得分:0)
事实证明,我没有注意到beforeUpdate()
方法的存在,它正在调用setStatusDate()
。这些是该方法的相关部分:
def setStatusDate()
{
def now = new Date()
...
else if(status == Status.PRINTED)
printed = now
...
}
因此resetPrinted()
将其设置为null,但在更新发生之前,beforeUpdate()
正在触发,调用setStatusDate()
,并将其设置回now
。< / p>
结论:如果数据出错,请检查是否存在以下方法:beforeInsert, beforeUpdate, beforeDelete, beforeValidate, afterInsert, afterUpdate, afterDelete,
和onLoad