0

我有一个 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项目实例的字段并保存项目实例来做到这一点。这反过来又保存了 set 中的其余对象clientAttributes。在集合中保存第二个对象时,验证器被触发,它会抛出一个错误,因为该findBy()方法返回相同的对象。

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

谢谢

4

1 回答 1

1

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

name blank: false, unique: 'project'
于 2012-09-11T02:46:40.373 回答