Hibernate - 控制插入和更新查询

Sat*_*ish 4 java sql orm hibernate

考虑以下关联 Book has OneToMany Chapters

如果我执行:

session.save(book)
session.save(chapter)
session.getTransaction().commit()
Run Code Online (Sandbox Code Playgroud)

Hibernate 为 Book 生成插入查询并为 Chapter 生成插入查询

但是如果我执行:

session.save(chapter)
session.save(book)
session.getTransaction().commit()
Run Code Online (Sandbox Code Playgroud)

Hibernate 执行章节插入查询、书籍插入查询和章节更新查询。

有没有办法在 2 次插入而不是 2 次插入和 1 次更新中做到这一点?(假设主键生成类似于 Identity 和 Chapter.Book 可以为空)

Boz*_*zho 5

那是因为你可能有Book 1..n Chapter,cascade设置为(至少)PERSIST。这意味着每当保存一本书时,它的所有章节也都会保存。

因此,您实际上是在尝试两次保存这些章节。您不需要第二次保存(在第二个示例中)

第一个示例以这种方式工作,因为该章节已与会话相关联(也许您没有覆盖hashCode()equals()方法),并且save()根本不执行任何操作。

但这些都是猜测。你必须显示你的映射。