Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何在Grails中使用自定义验证器正确检查字段唯一性?_Hibernate_Grails_Validation - Fatal编程技术网

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

Hibernate 如何在Grails中使用自定义验证器正确检查字段唯一性?,hibernate,grails,validation,Hibernate,Grails,Validation,我有一个ClientAttribute域类,有两个字段:name(String)&project(project)。 Project和ClientAttribute之间存在一对多关系,在单个项目中,所有名称都必须是唯一的 首先,我考虑创建以下验证器: name(blank: false, validator: { val, obj -> if (ClientAttribute.findByProjectAndName(obj.project, val)) retur

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

首先,我考虑创建以下验证器:

name(blank: false, validator: { val, obj ->
            if (ClientAttribute.findByProjectAndName(obj.project, val)) return ['clientAttribute.name.unique']
        })
不幸的是,在创建
ClientAttribute
的新实例时,我是通过将新实例添加到项目实例的
clientAttributes
字段并保存项目实例来完成的。这将依次保存集合
clientAttribute
中的其余对象。当保存集合中的第二个对象时,会触发验证器,它会向我抛出一个错误,因为
findBy()
方法返回相同的对象

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


谢谢

也许我不了解您的域模型,但是什么阻止您在项目和名称上使用客户端属性?像这样:

name blank: false, unique: 'project'

我不知道为什么我认为这个字段只是布尔值。该死!谢谢你,大卫!