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

Grails domain custom validator check uniqueness

您能否检查 Grails 域中自定义验证器中字段的组合唯一性 class?

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']
}

}

你不能。唯一约束是 DDL 约束。这意味着 Grails/Hibernate 将在您的应用程序启动时在您的数据库架构中创建一个唯一索引,因此约束保持不变。验证器约束只是一个闭包,每次验证域 class 时都会在运行时执行。

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