我们如何在grails3中禁用全局级别的deepvalidate,就像我们保存一个域对象一样,它试图保存所有内部域对象,导致不同的错误,如唯一约束和所有。
我们正在使用mongodb
Grails版本3.3.2
Gorm版本6.1.9。发布
答案 0 :(得分:1)
在Grails 3或4中全局禁用级联验证:
grails-app / conf / application.groovy
grails.gorm.default.mapping = {
'*'(cascadeValidate: 'none')
// Alternatively, validate nested changed objects:
// '*'(cascadeValidate: 'dirty')
}
参考:https://gorm.grails.org/latest/hibernate/manual/
第13.3。节级联约束验证
答案 1 :(得分:0)
根据最新版本documentation,您可以设置deepValidate
参数为optional
,默认为true
默认情况下为true
;将其设置为false
以禁用级联验证。
示例:
def b = new Book(title: "The Shining")
b.save(flush: true,deepValidate: false)
deepValidate
(可选) - 确定是否还应验证域实例的关联,即验证是否级联。默认情况下为true
- 设置为false
以禁用级联验证。
此外,您可以设置validate:true
以根据其定义的约束验证域类。或者跳过将其设置为validate:false
。
Grails在GORM配置选项中未提及deepValidate
。
您可以参考提供不同选项的文档here
答案 2 :(得分:0)
在GORM 6.1.10中,一个should not mutate state directly。这将允许您禁用关联的级联验证。默认情况下,# If there are .deb files in the folder, then install them
if [ `ls -1 *.deb 2> /dev/null | wc -l` -gt 0 ]; then
for file in *.deb; do
# Only install if not already installed (non-zero exit code)
dpkg -I ${file} | grep Package: | sed -r 's/ Package:\s+(.*)/\1/g' | xargs dpkg -s
if [ $? != 0 ]; then
dpkg -i ${file}
fi;
done;
else
err "No .deb files found in '$PWD'"
fi
为true。
cascadeValidate
我看不到为所有域对象全局配置此方法的方法,但是为域中的关联设置class Book {
Author author
static mapping = {
author cascadeValidate: false
}
}
意味着您不需要向所有{{1 }}通话。