Grails——用空日期更新域对象

Grails——用空日期更新域对象,grails,Grails,在域对象中,以下是我的数据结构和约束块的相关片段 Date printed static constraints = { printed (Display:false, nullable:true) } 然后我写了这个方法 def resetPrinted() { printed = null save() } 当我执行该方法时,printed被设置为当前日期,而不是null 我发现有相当多的人抱怨这个问题,但我还没有找到一个实际的解决办法。以下是我到目

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

Date printed

static constraints =
{
    printed (Display:false, nullable:true)      
}
然后我写了这个方法

def resetPrinted()
{
    printed = null
    save()
}
当我执行该方法时,
printed
被设置为当前日期,而不是null

我发现有相当多的人抱怨这个问题,但我还没有找到一个实际的解决办法。以下是我到目前为止的发现:


我正在使用Grails2.2.4。如果在2.3.0中以某种方式解决了这个问题,我会升级,但我不想升级。

事实证明,我没有注意到在preupdate()之前存在一个
方法,该方法调用了
setStatusDate()
。以下是该方法的相关章节:

def setStatusDate()
{
    def now = new Date()
    ...
    else if(status == Status.PRINTED)
        printed = now
    ...
}
因此,
resetPrinted()
将其设置为null,但就在更新发生之前,
beforeUpdate()
正在触发,它调用了
setStatusDate()
,并将其设置回
now


结论:如果数据出错,检查是否存在以下方法:
插入前、更新前、删除前、验证前、插入后、更新后、删除后、
加载后

通过2.2.4中的控制台进行测试时,其工作正常。你的实现看起来怎么样?dmahapatro,你是对的,这不是真正的问题。我没有注意到一个
beforeUpdate()
方法也在改变
printed
。我是否应该删除这个问题,因为它被证明是无用的,并且只会分散未来读者的注意力?我建议你添加一个答案,说明你所面临的问题,并发现(如何以及为什么
beforeUpdate()
)阻碍了你,然后接受答案。