为什么 Hibernate 在 SAVE 之前执行 SELECT?

Jul*_*lia 7 optimization hibernate

为什么休眠会在保存对象之前进行选择?

我在互联网上找不到有用的信息。这是每次保存前的正常行为吗?我找到了这个主题,为 hibernateTemplate.save() 选择查询运行- 保存,但我没有找到这个答案“确定性”。我的意思是,如果我想在保存每个对象之前避免这个选择,我们是否必须使用版本控制?

我将不胜感激所有的解释或链接。

tym*_*tam 2

我知道您已经在问题的评论中回答了自己的问题,但这里只是总结一些一般要点。

澄清一下,NHibernate 在“SQL INSERT”中使用“save”,在“SQL UPDATE”中使用“update”。

我知道 NHibernate 在持久化之前会从数据库隐式获取对象(不显式使用 s.Update)时存在以下常见情况:

  1. 在 session_flush/transaction_commit 上(取决于设置),当映射中 select-before-update 设置为“true”时;
  2. 当使用 SaveOrUpdate 并且实例的标识符具有表明它存在于数据库中的值时;
  3. 在 s.Delete 之前。

与您的示例一样,当使用父子对象时,这可能并不明显(但简单的规则保持不变),因为从获取子对象的代码中可能并不明显。