1

前言:这个问题是这个答案的派生词,专门谈论NHibernate而不是Hibernate

至于 Hibernate,org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(EventSource) 的 javadoc 说:

以特殊顺序执行所有 SQL 和二级缓存更新,以免违反外键约束:

  1. 插入,按执行顺序
  2. 更新集合元素的删除
  3. 集合元素的插入
  4. 删除,按执行顺序

我的问题:

  1. 如果它适用于 Hibernate,那么这个命令是否也适用于 NHibernate?
  2. 这个确定性的顺序是否记录在某处?

另外 - 如果这种行为是特定于 DBMS 的,我正在使用 SQL Server。

4

1 回答 1

4

NHibernate 3.3的文档详细描述了调用 Session.Flush 时的步骤(第 9.6 点)。在session.FlushMode = FlushMode.Commit;这种情况下,事务批处理将如何执行:

步骤是:

  • 所有实体插入,以相同的顺序使用 ISession.Save() 保存相应的对象

  • 所有实体更新

  • 所有集合删除

  • 所有集合元素的删除、更新和插入

  • 所有集合插入

  • 所有实体删除,以相同的顺序使用 ISession.Delete() 删除相应的对象

我主要使用 SQL Server (2008) 并且可以说这是这样工作的..

于 2012-12-01T05:28:25.367 回答