我在Grails 2.4中创建了两个对象之间的多对多关系但是当我尝试在我的bootstrap文件中添加数据时,它会失败并给我这个错误
Message: No signature of method: ca.ogsl.romm.observation.Behavior.addToTaxonGroup() is applicable for argument types: (ca.ogsl.romm.observation.TaxonGroup) values: [ca.ogsl.romm.observation.TaxonGroup : (unsaved)]
Possible solutions: addToTaxonGroups(java.lang.Object)
这些是我的域类
Behavior.groovy
class Behavior {
int id
String code
String nameFr
String nameEn
static belongsTo = TaxonGroup
static hasMany = [taxonGroups: TaxonGroup]
static constraints = {
nameFr nullable: true
nameEn nullable: true
}
}
TaxonGroup.groovy
class TaxonGroup {
int id
String code
String nameFr
String nameEn
static hasMany = [behaviors: Behavior]
static constraints = {
nameFr nullable: true
nameEn nullable: true
behaviors nullable: true
}
}
最后,这是我的 BootStrap.groovy
中的代码new Behavior(code: "basking")
.addToTaxonGroup(new TaxonGroup(code:"reptiles"))
.save()
我一直在寻找几个小时并尝试添加各种方法,但似乎没有什么可以解决这个问题......
任何人都知道我做错了什么? 非常感谢你的时间!!!
答案 0 :(得分:1)
addToXXX和removeFromXXX动态方法是根据hasMany
地图中的键创建的;这也是Grails为课程添加的Set
或List
的名称。带有addTo
(或removeFrom
)的前缀并将首字母大写 - 因此对于taxonGroups
,它将是addToTaxonGroups
,而不是addToTaxonGroup
。同样,对于behaviors
,它应为addToBehaviors
和removeFromBehaviors
。
此外,无关(也不是问题) - 删除behaviors nullable: true
;这没有任何影响。集合(当您第一次实例化类实例时除外)是空的或者有一个或多个项目,但在持久性实例中永远不会为null。
删除int id
- Grails在编译期间通过AST为字节码添加Long id
属性,并且几乎每个编辑器/ IDE /等都很少有冗余指定属性的好处。 。期望有一个id
字段,因此它对自动完成等没有帮助。