hibernate - Grails一对多保存的子代仅刷新父子集

标签 hibernate grails gorm grails-2.2

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

最佳答案

Per Grails addTo documentation

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

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

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

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

关于hibernate - Grails一对多保存的子代仅刷新父子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15950220/

相关文章:

java - hibernate复合主键中存在find而不覆盖equals和hashCode

grails - Grails URL验证

grails - Grails:每当删除主域对象时,如何删除关联的域?

grails - Grails中的唯一约束

java - 右连接 JPA 查询无法获得准确的输出

java - SpringBoot JPA hibernate : Error creating bean with name 'entityManagerFactory'

java - 当我尝试从 sessionFactory 打开 hibernate 获取 session 时,出现 org.apache.wicket.WicketRuntimeException

maven - 来自 Travis CI 的 Grails 依赖项失败

grails - grails,如何强制浏览器下载文件

grails - Grails,MySQL,传递查询