Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 如果我在知道我的所有数据都不存在的情况下更改域中的约束,我的数据会发生什么变化';你不能满足这个限制吗?_Grails_Constraints - Fatal编程技术网

Grails 如果我在知道我的所有数据都不存在的情况下更改域中的约束,我的数据会发生什么变化';你不能满足这个限制吗?

Grails 如果我在知道我的所有数据都不存在的情况下更改域中的约束,我的数据会发生什么变化';你不能满足这个限制吗?,grails,constraints,Grails,Constraints,我是使用Grails的新手,我正在一个相当大的平台上工作,这个平台已经运行了几年 我想将我的一个域类中的一个字段更改为不再为空 当前存在的不满足该约束的数据会发生什么情况 非常感谢您的帮助 谢谢 您应该能够获取这些新的无效对象,但是调用save()将导致不保存或保存(failOnError:true)将导致验证异常 根据您的需要和字段表示的内容,您可以将字段设置为所有现有空值或更复杂的值(但可能更有用)-为特定字段编写自定义约束验证器,该验证器允许已持久化的对象保留null,但对字段为null的

我是使用Grails的新手,我正在一个相当大的平台上工作,这个平台已经运行了几年

我想将我的一个域类中的一个字段更改为不再为空

当前存在的不满足该约束的数据会发生什么情况

非常感谢您的帮助


谢谢

您应该能够获取这些新的无效对象,但是调用
save()
将导致不保存或
保存(failOnError:true)
将导致
验证异常

根据您的需要和字段表示的内容,您可以将字段设置为所有现有空值或更复杂的值(但可能更有用)-为特定字段编写自定义约束验证器,该验证器允许已持久化的对象保留null,但对字段为null的新保存实例引发异常

**验证器方法**

我还没有对此进行测试,但我认为类似的东西将是约束验证器的一种方式。逻辑可能会被简化,或者我还没有抓住边缘案例,但值得一试

Integer someField

someField validator: { val, obj ->
    // new objects must have a non-null
    if(!obj.id) {
        return val != null
    } else {
        // if field has changed and changed to null
        if (obj.isDirty('someField') && val == null) {
            return false
        } else {
            return true
        }
    }
}

您应该能够获取这些新的无效对象,但是调用
save()
将导致不保存或
保存(failOnError:true)
将导致
验证异常

根据您的需要和字段表示的内容,您可以将字段设置为所有现有空值或更复杂的值(但可能更有用)-为特定字段编写自定义约束验证器,该验证器允许已持久化的对象保留null,但对字段为null的新保存实例引发异常

**验证器方法**

我还没有对此进行测试,但我认为类似的东西将是约束验证器的一种方式。逻辑可能会被简化,或者我还没有抓住边缘案例,但值得一试

Integer someField

someField validator: { val, obj ->
    // new objects must have a non-null
    if(!obj.id) {
        return val != null
    } else {
        // if field has changed and changed to null
        if (obj.isDirty('someField') && val == null) {
            return false
        } else {
            return true
        }
    }
}

欢迎,我在回答中详细介绍了验证器部分。欢迎,我在答案中添加了更多的内容来阐述验证程序部分。如果对应用程序有意义的话,在部署新版本的应用程序之前,先考虑一个SQL脚本来更新现有记录。这样,数据将为约束做好准备,您不必添加代码来处理旧记录;随着记录的更新,最终可能会过时的代码。Emmanuel,这是个好主意。我没有想到在我创建了约束之后,这些代码将如何过时。在实际实现之前,我将研究如何更新数据以满足约束。如果对应用程序有意义的话,在部署新版本的应用程序之前,先考虑一个SQL脚本来更新现有记录。这样,数据将为约束做好准备,您不必添加代码来处理旧记录;随着记录的更新,最终可能会过时的代码。Emmanuel,这是个好主意。我没有想到在我创建了约束之后,这些代码将如何过时。在实际实现之前,我将研究如何更新数据以满足约束。