【问题标题】:How to properly check field uniqueness using custom validator in Grails?如何使用 Grails 中的自定义验证器正确检查字段唯一性?
【发布时间】:2012-09-10 21:14:57
【问题描述】:

我有一个 ClientAttribute 域类,有 2 个字段:name (String)project (Project)ProjectClientAttribute 之间存在一对多关系,在单个项目中,所有名称都必须是唯一的。

起初我想创建以下验证器:

name(blank: false, validator: { val, obj ->
            if (ClientAttribute.findByProjectAndName(obj.project, val)) return ['clientAttribute.name.unique']
        })

不幸的是,在创建 ClientAttribute 的新实例时,我通过将新实例添加到项目实例的 clientAttributes 字段并保存项目实例来做到这一点。这反过来又保存了集合clientAttributes 中的其余对象。在集合中保存第二个对象时,验证器被触发,它会抛出一个错误,因为 findBy() 方法返回相同的对象。

我想知道,执行此类检查的正确方法是什么? 我可以修改查询以不返回与当前保存的对象相同的对象,但我想知道是否没有更简单的解决方案来解决我的问题?

谢谢

【问题讨论】:

    标签: hibernate grails validation


    【解决方案1】:

    也许我不了解您的域模型,但是是什么阻止您在项目和名称的 ClientAttribute 中使用 Grails Unique Constraint?像这样:

    name blank: false, unique: 'project'
    

    【讨论】:

    • 我不确定为什么我认为该字段只是布尔值。该死!谢谢大卫!
    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2013-04-27
    • 2017-08-14
    相关资源
    最近更新 更多