如何在Grails中使用自定义验证器正确检查字段唯一性?

时间:2012-09-10 21:14:57

标签: hibernate grails validation

我有一个ClientAttribute域类,有两个字段: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()方法返回相同的对象。

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

由于

1 个答案:

答案 0 :(得分:1)

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

name blank: false, unique: 'project'