如果我在我的域中更改约束,知道我的所有数据都不满足该约束,那么我的数据会发生什么?

时间:2016-01-26 00:17:38

标签: grails constraints

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

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

当前存在的数据不会满足该约束条件会发生什么?

非常感谢帮助,

谢谢!

1 个答案:

答案 0 :(得分:2)

您应该能够获取这些新的无效对象,但调用save()将导致非保存或save(failOnError: true)将导致ValidationException

根据您的需要和字段所代表的内容,您可以将字段设置为适用于所有现有空值或更复杂(但可能更有用)的字段 - 为特定字段编写自定义约束验证器,以允许已经存在的对象持久保留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
        }
    }
}