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: false
或 min: 6
,而底层数据库不知道这样的约束,那么保存就可以完美无缺了。
如果我在域对象上调用 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: false
或 min: 6
,而底层数据库不知道这样的约束,那么保存就可以完美无缺了。