Grails:以多对多关系添加数据会产生错误

时间:2014-11-13 17:00:18

标签: grails groovy gorm

我在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()

我一直在寻找几个小时并尝试添加各种方法,但似乎没有什么可以解决这个问题......

任何人都知道我做错了什么? 非常感谢你的时间!!!

1 个答案:

答案 0 :(得分:1)

addToXXX和removeFromXXX动态方法是根据hasMany地图中的键创建的;这也是Grails为课程添加的SetList的名称。带有addTo(或removeFrom)的前缀并将首字母大写 - 因此对于taxonGroups,它将是addToTaxonGroups,而不是addToTaxonGroup。同样,对于behaviors,它应为addToBehaviorsremoveFromBehaviors

此外,无关(也不是问题) - 删除behaviors nullable: true;这没有任何影响。集合(当您第一次实例化类实例时除外)是空的或者有一个或多个项目,但在持久性实例中永远不会为null。

删除int id - Grails在编译期间通过AST为字节码添加Long id属性,并且几乎每个编辑器/ IDE /等都很少有冗余指定属性的好处。 。期望有一个id字段,因此它对自动完成等没有帮助。