使用read()获取它时,即使在显式save()之后域也不会持久化

时间:2018-04-06 12:51:52

标签: grails

我使用read()检索了域对象,更改了一些属性并使用save()明确保存了它。我可以看到版本正在更新但不是属性

应该更新属性以及grails read()文档

中提到的版本

示例域名:

class AdhocChargeType{
    String adHocChargeType
    String glCode
}

Controller test method:

class AdhocChargeTypeController
{
    def testRead(Long id)
    {
        AdhocChargeType adHocChargeType = AdhocChargeType.read(id)
        adHocChargeType.properties = [adHocChargeType:"changed?"]
        adHocChargeType.save()
    }
}

2 个答案:

答案 0 :(得分:0)

Grails save()方法无声地失败。如果您有验证错误,那么它将无法保存。

尝试

save flush:true,failOnError:true

解决是否存在任何验证错误。之后数据应该存在。

答案 1 :(得分:0)

保存域实例后,Grails使用定义的约束对其进行验证。如果域实例中的值违反了这些约束,则保存将失败。问题是,这种失败是安静地发生的:如果你检查save()的返回值或者调用hasErrors(),你只知道它。

if (!adHocChargeType.save()) {
    // Save failed! Present the errors to the user.
    ...
}

另一种方法是:

adHocChargeType.save(failOnError: true)

我建议您查看GORM最佳做法:

http://spring.io/blog/2010/06/23/gorm-gotchas-part-1/

http://spring.io/blog/2010/07/02/gorm-gotchas-part-2/

http://spring.io/blog/2010/07/28/gorm-gotchas-part-3/