如何为grails中的许多属性编写约束

如何为grails中的许多属性编写约束,grails,gorm,Grails,Gorm,我在grails应用程序中有三个类 class Category { String name } class Application { String name static hasMany =[specialCategoryies:SpecialCategory] } class SpecialCategory { Category category Integer points static belongsTo =[application:

我在grails应用程序中有三个类

class Category {
    String name
}

class Application {
    String name
    static hasMany =[specialCategoryies:SpecialCategory]
}

class SpecialCategory {
    Category category
    Integer points
    static belongsTo =[application:Application]
}
在这里,当我保存应用程序实例时,我不想保存重复的应用程序 specialCategories值,如..specialCategories没有相同的 再次输入类别值

application.addToSpecialCategoryies(newSpecialCategory(category:Category.get(1),points:2))
application.addToSpecialCategoryies(newSpecialCategory(category:Category.get(1),points:3))
这里我的应用实例应该出现分类值重复的错误。。 那么,如何为域类中的多个属性定义约束呢。。。。。。?
建议如何编写约束以避免重复类别值

您可以尝试在应用程序约束部分使用自定义验证器。例如,检查重复属性值的一种方法是将值收集到数组中,并将其与相应的唯一数组进行比较(删除重复的元素):

当试图用现有类别保存特殊类别时,保存时将抛出验证错误。您可以使用以下各项进行测试:

    def cat1 = new Category(name:"Cat 1").save(flush:true)
    def cat2 = new Category(name:"Cat 2").save(flush:true)

    def app = new Application()
    app.name = "Test"

    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:2))
    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(2), points:2))
    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:3))

   if ( app.save(flush:true)   ){
          log.info "Saved!"
   }   else {
          log.error "NOT Saved. Error:"
       app.errors.each {
           log.error it
       }
   }

我不认为你能用hasMany来做这个。最好的解决方案可能是定义自己的关系,链接域类型,并在其中使用“唯一”约束强制执行规则。
    def cat1 = new Category(name:"Cat 1").save(flush:true)
    def cat2 = new Category(name:"Cat 2").save(flush:true)

    def app = new Application()
    app.name = "Test"

    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:2))
    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(2), points:2))
    app.addToSpecialCategoryies(new SpecialCategory(category: Category.get(1), points:3))

   if ( app.save(flush:true)   ){
          log.info "Saved!"
   }   else {
          log.error "NOT Saved. Error:"
       app.errors.each {
           log.error it
       }
   }