Validation 未保存对象的hasMany关系的验证

Validation 未保存对象的hasMany关系的验证,validation,grails,constraints,grails-domain-class,Validation,Grails,Constraints,Grails Domain Class,在Grails2.3.4应用程序中,我有一个表示作者和文章之间关系的域类。它包含三个属性: 类型id(表示作者(1)、查看器(3)和其他类型) 成员 文章 - 某些类型在语义上不允许创建多对类型+作者。例如: 每篇文章只能有一位作者 其他类型+作者没有这种限制。例如:查看器 ArticleRelation中添加了一个条件,以防止出现如下重复: static constraints = { article validator: { val, obj -> if ((obj

在Grails2.3.4应用程序中,我有一个表示作者和文章之间关系的域类。它包含三个属性:

  • 类型id(表示作者(1)、查看器(3)和其他类型)
  • 成员
  • 文章
-

某些类型在语义上不允许创建多对类型+作者。例如:

  • 每篇文章只能有一位作者
其他类型+作者没有这种限制。例如:查看器

ArticleRelation中添加了一个条件,以防止出现如下重复:

static constraints = {
  article validator: { val, obj ->
    if ((obj.type == 1) || (obj.type == 2)) {
      if (ArticleRelation.countByArticleAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
    }
  }
}
def article = new Article(title: "Man on the Moon")
article.addToRelations(new ArticleRelation(type:1, member:me))
article.addToRelations(new ArticleRelation(type:1, member:you))

article.validate()
但是,在Grails 2.3中,此验证并不能阻止向以下项目关系添加重复项:

static constraints = {
  article validator: { val, obj ->
    if ((obj.type == 1) || (obj.type == 2)) {
      if (ArticleRelation.countByArticleAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
    }
  }
}
def article = new Article(title: "Man on the Moon")
article.addToRelations(new ArticleRelation(type:1, member:me))
article.addToRelations(new ArticleRelation(type:1, member:you))

article.validate()
验证并没有像我预期的那样失败。我认为这是因为对象尚未保存


是否应以某种方式在第条(以及)中实施验证?如果是这样,怎么做?

为什么不在验证之前保存实体?我同意Pawel-首先保存您的
ArticleRelation
s。确保所有内容都包装在一个事务中(在服务中),如果验证失败,可以回滚该事务。