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

Joh*_*ohn 1 grails grails-orm

如果我在域对象上调用 save() 但设置了 validate: false 会发生什么?

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

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

cfr*_*ick 6

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

例如,如果您在域对象中设置了blank: falsemin: 6,并且底层数据库不知道此类约束,则可以完美地保存。