前言:此问题是this answer的衍生产品,专门针对NHibernate
而非Hibernate
。
对于Hibernate,javadoc到org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(EventSource)说:
以特殊顺序执行所有SQL和二级缓存更新,以便不会违反外键约束:
- 按照执行顺序插入
- 更新删除集合元素
- 插入集合元素
- 按照执行顺序删除
醇>
我的问题:
此外 - 如果此行为是特定于DBMS的,我正在使用SQL Server。
答案 0 :(得分:3)
NHibernate 3.3的文档详细描述了调用Session.Flush时的步骤(第9.6点)。如果是session.FlushMode = FlushMode.Commit;
,这就是交易批次的执行方式:
步骤如下:
所有实体插入,使用ISession.Save保存相应对象的相同顺序
所有实体更新
所有集合删除
所有集合元素删除,更新和插入
所有收集插入
所有实体删除,使用ISession.Delete()删除相应对象的相同顺序
我主要使用的是SQL Server(2008),并且可以说这是以这种方式工作的。