如何在全局禁用grails中的deepvalidate?

时间:2018-03-28 07:19:55

标签: grails gorm

我们如何在grails3中禁用全局级别的deepvalidate,就像我们保存一个域对象一样,它试图保存所有内部域对象,导致不同的错误,如唯一约束和所有。

我们正在使用mongodb

Grails版本3.3.2

Gorm版本6.1.9。发布

3 个答案:

答案 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 }}通话。