考虑以下关联 本书有OneToMany章节
如果我执行:
session.save(book)
session.save(chapter)
session.getTransaction().commit()
Hibernate为Book生成插入查询并插入章节
的查询但是如果我执行:
session.save(chapter)
session.save(book)
session.getTransaction().commit()
Hibernate执行章节插入查询,插入书籍查询和更新章节查询。
有没有办法在2个插入而不是2个插入和1个更新中执行此操作? (假设主键生成类似于Identity,Chapter.Book可以为空)
答案 0 :(得分:4)
那是因为你可能有Book 1..n Chapter
,cascade
设置为(至少)PERSIST
。这意味着无论何时保存一本书,它的所有章节都会被保存。
所以你实际上是想两次保存这些章节。您不需要第二次保存(在第二个示例中)
第一个示例以这种方式工作,因为章节已与会话相关联(可能您没有覆盖hashCode()
和equals()
方法),save()
不会什么都做。
但这些都是猜测。你必须展示你的映射。