我有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];
这个错误与我在同一个域CatAttribute
中放置2个Category
个对象列表有关,如果我删除其中任何一个并继续我的对象创建,一切都很好,顺便说一下我映射的域类Category
全部基于grails ref
,所以我不认为映射有任何问题,但如果有,请告诉我。
答案 0 :(得分: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的关系。