1

序文:この質問はこの回答NHibernateの派生物であり、の代わりに具体的に話しHibernateます。

Hibernateに関して、org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(EventSource)へのjavadocは次のように述べています。

外部キー制約に違反しないように、すべてのSQLおよび第2レベルのキャッシュ更新を特別な順序で実行します。

  1. 挿入、実行された順序
  2. コレクション要素の削除を更新
  3. コレクション要素の挿入
  4. 実行された順序で削除します

私の質問:

  1. Hibernateに適用される場合、この順序はNHibernateにも適用されますか?
  2. この決定論的順序はどこかに文書化されていますか?

また、この動作がDBMS固有の場合、SQLServerを使用しています。

4

1 に答える 1

4

NHibernate 3.3のドキュメントには、Session.Flushが呼び出されたときの手順が詳しく説明されています(ポイント9.6)。この場合session.FlushMode = FlushMode.Commit;、トランザクションバッチは次のように実行されます。

手順は次のとおりです。

  • すべてのエンティティの挿入、同じ順序で、対応するオブジェクトがISession.Save()を使用して保存されました

  • すべてのエンティティの更新

  • すべてのコレクションの削除

  • すべてのコレクション要素の削除、更新、および挿入

  • すべてのコレクションの挿入

  • すべてのエンティティの削除、同じ順序で、対応するオブジェクトがISession.Delete()を使用して削除されました

私は主にSQLServer(2008)を使用しており、これはこのように機能していると言えます。

于 2012-12-01T05:28:25.367 に答える