Grails - 如果保存时验证为假且域对象无效,save() 会发生什么情况?

Grails - what happens with save() if validate on save is false and domain object is invalid?

如果我在域对象上调用 save() 但设置了 validate: false 会怎样?

if (!domainObject.save(validate: false)) {
    def errors = ""
    domainObject.errors.each {
        errors += it
    }
    throw new Exception("Error saving domainObject: ${errors}")
}

虽然我会在这里得到一个异常,因为保存会 return null,但是我有一个测试期待一个异常但是它失败了,因为 none 被抛出。如果我打开 failOnError 并且不关闭验证,那么测试将按预期执行。如果对象无效,save() return 会做什么?

如果您关闭 save 的验证,则在不事先验证实例的情况下执行保存。由于底层数据库的限制,这可能有效也可能无效。但是,如果实例被持久化,那么 save 将 return (持久化的)对象,这不会进入您的 if 分支。

如果例如你已经在你的域对象中设置了 blank: falsemin: 6,而底层数据库不知道这样的约束,那么保存就可以完美无缺了。