在Grails 2.3.4应用程序中,我有一个表示作者和文章之间关系的域类。它包含三个属性:
-
class Article {
static hasMany = [ relations: ArticleRelation ]
string title
}
class ArticleRelation {
static belongsTo = [ article: Article ]
int type
Member member
}
某些类型在语义上不允许创建多对类型+作者。例如:
其他类型+作者没有这个限制。例如:viewer。
条件已添加到ArticleRelation以防止重复这样的内容:
static constraints = {
article validator: { val, obj ->
if ((obj.type == 1) || (obj.type == 2)) {
if (ArticleRelation.countByArticleAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
}
}
}
但是,在Grails 2.3中,此验证不会阻止向文章关系添加重复项:
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()
验证不会像我预期的那样失败。我认为这是因为对象尚未保存。
应该以某种方式在文章中实施验证吗?如果是这样,怎么样?