0

我有 2 个域类:Category 和 CatAttribute,它们具有多对一的关系,Category 有 2 个 CatAttribute 列表。

class Category {

    static constraints = {
        description nullable: true
        name unique: true
    }


    static hasMany = [params:CatAttribute, specs:CatAttribute]
    static mappedBy = [params: "none", specs: "none"]
    static mapping = {
    }

    List<CatAttribute> params  //required attributes
    List<CatAttribute> specs   //optional attributes
    String name
    String description        


}

和我的 CatAttribute 类:

class CatAttribute {

    static constraints = {
    }
    static belongsTo = [category: Category]
    String name

}

当我尝试创建新对象时,它无法保存:

def someCategory = new Category(name: "A CATEGORY")
.addToSpecs(new CatAttribute(name: "SOMETHING"))
.addToParams(new CatAttribute(name: "onemore attribute"))
.save(flush: true, failOnError: true)

这里的领域类是简化的/数据是为了说明目的而模拟的,实际的生产代码要复杂得多,但两个领域之间的关系是相同的。

.addToSpec 行发生验证错误:

Field error in object 'Category' on field 'specs[0].category': rejected value [null];

这个错误与我将 2 个CatAttribute对象列表放在同一个域中有关Category,如果我删除其中任何一个并继续创建对象,一切都很好,我映射域类Category的方式都是基于grails ref ,所以我不认为映射有什么问题,但如果有,请告诉我。

4

1 回答 1

0

你真的需要关联作为List(你索引吗),默认情况下它们是Set.
修改类别如下,你应该很好:

class Category {
    String name
    String description

    static hasMany = [params: CatAttribute, specs: CatAttribute]
    static mappedBy = [params: "category", specs: "category"]

    static constraints = {
        description nullable: true
        name unique: true
        params nullable: true //optional
    }
}

如果您需要 1:m 关系。

于 2013-10-11T22:41:21.927 回答