Grails - 使用null Date更新域对象

时间:2013-10-01 21:56:43

标签: grails

在域对象中,这是我的数据结构和约束块的相关片段

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中以某种方式修复了这个问题,我会升级,但否则我宁愿不升级。

1 个答案:

答案 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