如何在BootStrap.groovy init中创建具有多个关系的对象

时间:2014-01-13 21:39:21

标签: grails gorm relationship

我想生成一些我可以在BootStrap.groovy中测试的虚拟内容,但是当我有多个关系时,我很难让它工作。

我有3个域类:用户,书籍和作者

用户有很多书。 一位作家有很多书。

我设置如下:

class User {
    static hasMany = [books:Book]
}
class Author {
    static hasMany = [books:Book]
}
class Book {
    static belongsTo = [author:Author, user:User]
}

我想让BootStrap.groovy创建并保存一些书籍,但我无法让它工作。继承人我所拥有的:

def init = { servletContext ->
    def u1 = new User(login:"mrx", password:"p", name:"Mr X")
    def u2 = new User(login:"mry", password:"p", name:"Mr Y")

    def a1 = new Author(name:"Mary Shelley")
    def a2 = new Author(name:"Stephen King")

    def b1 = new Book(title:"Frankenstein")
    def b2 = new Book(title:"The Shining")
    def b3 = new Book(title:"Misery")

    a1.addToBooks(b1)
    a2.addToBooks(b2)
    a2.addToBooks(b3)

    u1.addToBooks(b1)
    u1.addToBooks(b3)
    u2.addToBooks(b2)

    a1.save()
    a2.save()

    u1.save()
    u2.save()
}

当我查看书籍/索引(这是脚手架并且应该只显示所有书籍的列表)时,我没有收到任何错误,但列表中没有书籍。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您似乎没有要添加的Book实例。我通常只使用引用创建实例,而不是使用addTo方法。 E.g。

new Book(author:a1, user:u1, title:'Test', isbn:'test').save()

在BootStrap

之后,关系将会出现