【问题标题】:Grails - Make Embedded Field in Domain Class NullableGrails - 使域类中的嵌入字段可以为空
【发布时间】:2011-11-16 18:02:46
【问题描述】:

如何将嵌入字段指定为可为空的?在下面的简单示例中,如果没有与项目关联的价格,我希望字段价格可以为空。但是,如果有价格,则货币中的两个字段都是必需的。以下代码不起作用。当我尝试保存项目时,它抱怨货币字段的值为空。

 class Item {
  static constraints = {
    price(nullable:true)
  }
  static embedded = ['price']
  Currency price
}

class Currency {
  Integer quantity
  String currencyType
}

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    只需在您的嵌入对象中定义一个static constraints

    class Currency {
    ...
        static constraints = {
            quantity(nullable:true)
            currencyType(nullable:true,validator:{ String val, Currency obj -> 
                if ((val && !obj.quantity) || (!val && obj.quantity)) {
                    return 'Currency.both.fields.required';
                }
            })
        }
    }
    

    然后,只需将'Currency.both.fields.required' 添加到您的messages.properties 即可显示相应的错误。

    【讨论】:

    • 这不是我想要的。这将允许我没有货币,但它也将允许我拥有一个货币类型且没有数量的货币或没有货币类型的数量。所以这不符合我希望施加约束的业务规则。
    • 此时您可以添加自定义验证器来验证两个字段均已设置。我已经更新了我的回复,以说明如何做到这一点。
    • 是的,可以。谢谢。我只希望原始代码有效。看起来更漂亮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多