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

Grails-如果保存时验证为false,并且域对象无效,那么save()会发生什么情况?,grails,gorm,Grails,Gorm,如果我对域对象调用save(),但设置了validate:false,会发生什么 if (!domainObject.save(validate: false)) { def errors = "" domainObject.errors.each { errors += it } throw new Exception("Error saving domainObject: ${errors}") } 我本来以为我会在这里得到一个异常,因为sa

如果我对域对象调用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,但没有关闭validate,那么测试将按预期执行。如果对象无效,save()会返回什么?

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


例如,如果您在域对象中设置了
blank:false
min:6
,而底层数据库不知道此类约束,则可以完全正确地进行保存。

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


例如,如果您在域对象中设置了
blank:false
min:6
,而底层数据库不知道此类约束,则可以完全正确地进行保存。

但如果保存失败,那么save()肯定会返回null?在这种情况下,我的if语句将被执行。我不能代表那里的所有DB后端,但是对于SQL数据库,通常会抛出一个异常,并从DB服务器发出一条消息。以上代码纯粹是一场赌博
validate:false
适用于您知道自己在做什么(测试、批处理、引导等)的情况,如果数据库拒绝它,它实际上会抛出异常。但是如果保存失败,save()肯定会返回null?在这种情况下,我的if语句将被执行。我不能代表那里的所有DB后端,但是对于SQL数据库,通常会抛出一个异常,并从DB服务器发出一条消息。以上代码纯粹是一场赌博
validate:false
适用于您知道自己在做什么(测试、批处理、引导等)的情况,如果数据库拒绝它,它实际上会抛出异常。