Grails域自定义验证器检查唯一性

时间:2015-05-29 16:34:43

标签: grails gorm

您可以在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']
}

}

1 个答案:

答案 0 :(得分:1)

你做不到。唯一约束是DDL约束。这意味着当您的应用程序启动时,Grails / Hibernate将在您的数据库模式中创建一个唯一索引,因此约束仍然是不可变的。验证器约束只是一个闭包,它将在每次验证域类时在运行时执行。

您必须使用查找程序或条件自行检查数据库中的实体来验证唯一性,如果已存在唯一条件,则拒绝错误。在您的查找程序中,不要忘记排除您正在验证的记录。