Validation Grails:约束:数据库允许空值,但窗体不能为空

Validation Grails:约束:数据库允许空值,但窗体不能为空,validation,grails,gorm,nullable,Validation,Grails,Gorm,Nullable,我有一个名为OurCompany的域对象,我希望能够有意识地插入一行,其中大部分为空。但是,当用户填写表单时,我希望对其进行验证,并且不允许空白 class OurCompany { static constraints = { enterpriseName blank:false, nullable:true } String enterpriseName static belongsTo = [measurement:Me

我有一个名为OurCompany的域对象,我希望能够有意识地插入一行,其中大部分为空。但是,当用户填写表单时,我希望对其进行验证,并且不允许空白

class OurCompany {

    static constraints = {        
        enterpriseName blank:false, nullable:true
    }

    String enterpriseName

    static belongsTo = [measurement:Measurement]

}
当我在数据库中创建空行时,我关闭了验证,它工作正常

ourCompany = new OurCompany();
measurement.addToOurCompany(ourCompany).save(validate:false);
稍后,当我更新行时,即使存在空/空值,也会忽略验证并保存记录

def ourCompany = loadOrCreateOurCompany();
def industrySectors = loadIndustrySectors();

bindData (ourCompany, params)

ourCompany.validate()
if (ourCompany.hasErrors()) {
    ourCompany.errors.allErrors.each {
        println(it)
    }
} else {            
    ourCompany.save();
}

我如何告诉grails我希望数据库接受空值,但在验证时,不允许空值或空白值?

这就是它的目的

这就是它的目的

解决方案(到目前为止)非常丑陋。似乎没有办法使grails域属性既可为null又具有约束。执行此操作的唯一方法是使用Command对象对进行验证。在我看来,这确实是一个相当痛苦的解决方案,而且是一个相当不雅观、缺乏文档记录的方法。这是我最不愉快的grails体验。

解决方案(到目前为止)非常糟糕。似乎没有办法使grails域属性既可为null又具有约束。执行此操作的唯一方法是使用Command对象对进行验证。在我看来,这确实是一个相当痛苦的解决方案,而且是一个相当不雅观、缺乏文档记录的方法。这是我最不愉快的grails体验。

谢谢Greg。我最终实现了这个,但我希望有更好的方法。我发现这是一个真正的浪费时间。我不同意这种解决方案是丑陋的和浪费时间的。除了在域级别允许某种条件约束之外,我不确定它还有什么更好的地方。可能是因为您错误地使用了Command对象,所以感觉很痛苦。当我完成我的实现后,我会把它贴在这里。谢谢Greg。我最终实现了这个,但我希望有更好的方法。我发现这是一个真正的浪费时间。我不同意这种解决方案是丑陋的和浪费时间的。除了在域级别允许某种条件约束之外,我不确定它还有什么更好的地方。可能是因为您错误地使用了Command对象,所以感觉很痛苦。当我完成我的实现后,我将把它发布在这里。