如何设置基于hasMany关系的唯一类属性?

时间:2013-05-04 17:41:54

标签: grails gorm database-schema grails-2.0 grails-domain-class

我有两个域类:

class Book {
  String name

  static hasMany = [articles: Article]
}   


class Article {
  String name

  static belongsTo = [book: Book]
}   

我想验证一本书在文章名称属性方面确实只有独特的文章。换句话说:同一本书中不得有同名的文章。 我该如何确保?

1 个答案:

答案 0 :(得分:1)

您可以使用Book课程中的自定义验证工具执行此操作(请参阅documentation)。

可能的实现可能如下所示:

static constraints = {
    articles validator: { articles, obj -> 
        Set names = new HashSet()
        for (Article article in articles) {
            if (!names.add(article.name)) {
                return false
            }
        }
        return true
    }
}

在此示例中,我使用java.util.Set检查重复的名称(Set.add()如果添加两次相同的名称则返回false。)

您可以使用myBookInstance.validate()触发对象的验证。