Grails一对多保存子项不刷新父子集

时间:2013-04-11 13:35:00

标签: hibernate grails gorm grails-2.2

使用经典作者/书籍模式(grails 2.2.0)。

class Author {
    static hasMany = [books: Book]
}

class Book {
    static belongsTo = [author: Author]
}

为什么在创建子实例时,它会更新父集:

Author author = new Author().save()
Book book = new Book(author: author).save()

assert author.books.size == 1 // FAIL

由于作者对象不会在数据库中更改,为什么我必须使用author.addToBooks(book).save()???

1 个答案:

答案 0 :(得分:4)

Per Grails addTo documentation

此外,调用addTo *初始化关联的集合,并在每本Book中设置author属性的反向引用。

addTo 明确添加了集合中的关联。在您的示例中,您只是添加了反向引用,但从不添加集合中的关联。基本上级联关联仅从所有者到依赖者执行。如果你想到这一点就有意义了,因为如果你有类似以下内容会发生什么:

class Author {
    static hasMany = [fictionBooks: Book, nonFictionBooks: Book]
}

然后您的new Book(author: author).save()应该将哪个收藏集保存到?