【问题标题】:Grails -- Update a domain object with a null DateGrails -- 使用空日期更新域对象
【发布时间】:2013-10-01 21:56:43
【问题描述】:

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

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 中得到了修复,我会升级,否则我宁愿不升级。

【问题讨论】:

  • 在 2.2.4 中通过控制台测试时按预期工作。您的实施情况如何?
  • dmahapatro,你是对的,这不是真正的问题。我没有注意到beforeUpdate() 方法也在改变printed。我应该删除这个问题吗,因为它没有用,只会分散未来读者的注意力?
  • 我建议你添加一个你遇到和发现的答案(beforeUpdate())阻止你的方式和原因,并接受答案。

标签: grails


【解决方案1】:

事实证明,我没有注意到 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多