0

使用经典的作者/书籍模式(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() ???

4

1 回答 1

4

根据 Grails addTo 文档

此外,调用 addTo* 会初始化关联的集合,并设置每个 Book 中作者属性的反向引用。

addTo显式添加集合中的关联反向引用。在您的示例中,您只添加了反向引用,而不是集合中的关联。基本上级联关联仅从所有者到依赖执行。如果您考虑一下,这是有道理的,因为如果您有以下情况会发生什么:

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

那么您应该new Book(author: author).save()保存到哪个集合?

于 2013-04-11T14:10:43.547 回答