【问题标题】:Grails domain custom validator check uniquenessGrails 域自定义验证器检查唯一性
【发布时间】:2015-05-29 16:34:43
【问题描述】:

您能否检查 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']
}

}

【问题讨论】:

  • 您不能以这种方式指定唯一性。请记住,唯一性是在数据库级别指定的,您不能在数据库中这样做。
  • 所以我必须运行一个查询并检查该组合是否已经存在?...findWhere(level:val,field1:object.field1)?//valid://error
  • 是的!在这种情况下,您必须创建一个可定制的解决方案以确保您的应用程序的唯一性。请记住,如果您想要数据库中的唯一性,您将需要两个表(一个包含 Field1 + Level 的表和另一个包含 Field2 + Level 的表)。

标签: grails grails-orm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2017-03-02
    • 1970-01-01
    • 2016-09-26
    • 2013-04-27
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多