0

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

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

4

1 回答 1

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

于 2013-10-04T01:20:27.637 回答