2014-11-23 30 views
0

我这样做:Grails的不DBCONSOLE

class Face { 
    String name 
    def ears = [] 
    Nose nose 

    void addEar(Ear ear){ 
    ears << ear 
    } 
} 

class Nose { 
    String name 
} 

class Ear { 
    String name 
} 

而且在BootStrap.groovy中:

def nose = new Nose(name: "Nose") 
    nose.save() 

    def leftEar = new Ear(name: "Left ear") 
    leftEar.save() 
    def rightEar = new Ear(name: "Right ear") 
    rightEar.save() 

    def face = new Face(name: "Face", nose: nose) 
    face.addEar(leftEar) 
    face.addEar(rightEar) 
    face.save() 

当我运行的应用程序,并输入DBCONSOLE看表,脸上有一参考它的鼻子,我可以读到它的名字“脸”,但它没有提及它的耳朵。我应该如何保存这个列表,以便以后可以访问它?

或者万一它真的被保存在某个地方,在哪里?我应该如何访问它?

+0

查看关于此处关联的Grails文档:http://grails.org/doc/latest/guide/GORM.html#oneToMany(专注于“一对多”和“多对多”关联)。你可以找到关于如何声明关联的好例子(静态'hasMany'属性)并向它们添加元素('addTo *'方法)。 – 2014-11-23 20:45:53

+0

太棒了!我试图使用hasMany,但是我没有添加addTo元素,所以也没有工作。现在它工作正常!谢谢!你会回答这个问题,所以我可以选择你的答案是正确的吗? – 2014-11-23 21:16:47

+0

我很高兴它帮助:)我刚刚手动'转换'我的评论回答。 – 2014-11-23 21:24:35

回答

0

看看Grails documentation about associations。关注“一对多”和“多对多”协会。你可以找到关于如何声明关联的好例子(静态hasMany属性)并向它们添加元素(addTo*方法)。

+0

要保持持久性的域类中的所有字段必须具有声明的类型,否则GORM不知道如何存储它并以静默方式忽略它。如果你存储了一个字符串/数字/布尔/等等,也会发生同样的情况。在那个财产。这有时被用作具有故意瞬态/非持久性属性的稍微懒惰的方式,但是我的首选是如果有意义的话,键入它,然后将它添加到“瞬变”列表中以明确声明您的意图。 – 2014-11-23 23:11:59

+0

@BurtBeckwith:谢谢你的出色解释! – 2014-11-24 08:21:59