Grails - 如果save上的validate为false且域对象无效,save()会发生什么?

时间:2015-02-13 18:21:14

标签: grails gorm

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

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

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

1 个答案:

答案 0 :(得分:4)

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

如果是您在域对象中设置了blank: falsemin: 6,而基础数据库不知道这些约束,那么保存可以完全正常。