NHibernate事务:批处理的INSERT-UPDATE_DELETE命令是否记录在某处?

时间:2012-11-30 21:21:56

标签: sql-server sql-server-2008 nhibernate batch-file transactions

前言:此问题是this answer的衍生产品,专门针对NHibernate而非Hibernate

  

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

     

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

     
      
  1. 按照执行顺序插入
  2.   
  3. 更新删除集合元素
  4.   
  5. 插入集合元素
  6.   
  7. 按照执行顺序删除
  8.   

我的问题:

  1. 如果它适用于Hibernate,这个命令是否也适用于NHibernate?
  2. 这个确定性顺序是否记录在某处?
  3. 此外 - 如果此行为是特定于DBMS的,我正在使用SQL Server。

1 个答案:

答案 0 :(得分:3)

NHibernate 3.3的文档详细描述了调用Session.Flush时的步骤(第9.6点)。如果是session.FlushMode = FlushMode.Commit;,这就是交易批次的执行方式:

步骤如下:

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

  • 所有实体更新

  • 所有集合删除

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

  • 所有收集插入

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

我主要使用的是SQL Server(2008),并且可以说这是以这种方式工作的。