我是一个相对较新的使用Grails,我正在一个已经运行了几年的相当大的平台上工作。
我想将其中一个域类中的某个字段更改为不再可为空。
当前存在的数据不会满足该约束条件会发生什么?
非常感谢帮助,
谢谢!
答案 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
}
}
}