Hibernate - 控制插入和更新查询

时间:2010-04-26 13:03:00

标签: java sql hibernate orm

考虑以下关联 本书有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可以为空)

1 个答案:

答案 0 :(得分:4)

那是因为你可能有Book 1..n Chaptercascade设置为(至少)PERSIST。这意味着无论何时保存一本书,它的所有章节都会被保存。

所以你实际上是想两次保存这些章节。您不需要第二次保存(在第二个示例中)

第一个示例以这种方式工作,因为章节已与会话相关联(可能您没有覆盖hashCode()equals()方法),save()不会什么都做。

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