Hibernate 如何在Grails中使用自定义验证器正确检查字段唯一性?
我有一个ClientAttribute域类,有两个字段: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
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'
我不知道为什么我认为这个字段只是布尔值。该死!谢谢你,大卫!