您可以在Grails域类中检查自定义验证器内的字段的组合唯一性吗?
Long points
String field1
String field2
Level level
level validator {val,obj->
if(obj.points<1000){
//make sure level is unique with field 1
level unique: ['field1']
}
else{
//make sure level is unique with field 2
level unique: ['field2']
}
}
答案 0 :(得分:1)
你做不到。唯一约束是DDL约束。这意味着当您的应用程序启动时,Grails / Hibernate将在您的数据库模式中创建一个唯一索引,因此约束仍然是不可变的。验证器约束只是一个闭包,它将在每次验证域类时在运行时执行。
您必须使用查找程序或条件自行检查数据库中的实体来验证唯一性,如果已存在唯一条件,则拒绝错误。在您的查找程序中,不要忘记排除您正在验证的记录。