アソシエーションテーブルとcascade = "save-update"を使用して、2つのエンティティ間で多対多リレーションシップを定義しました。NHibernate追加UPDATEクエリの実行
Entity1にはEntity2のリストが含まれ、逆にEntity2にはEntity1のリストが含まれています。このworflowから出力されたSQLが...
- が
- コールsession.Save Entity1 にEntity1上のリストにEntity2を追加Entity1とEntity2オブジェクトを作成し、[OKらしい
- > Insertステートメントは、両方のエンティティに対して実行され、次にそれらをリンクする関連テーブルに挿入されたレコードが実行されます。しかし
、I Entity2上最初コールsession.Saveは、リストに追加した場合、その後、何とまったく同じにEntity2のすべての値を設定し、追加のUPDATEステートメントの実行があるEntity1にsession.Saveを呼び出します最初に挿入されました。
問題は発生しませんが、パフォーマンスを低下させる追加のクエリです。私はinverse属性で演奏しましたが、追加の更新文は削除されません。現在どちらの側にも、どのエンティティが保存されていても関連テーブルを更新したいので、inverse = "false"となっています。
アイデア?
セッションはスレッドセーフではないことを覚えておいてください。私はほとんどの人がアプリケーションでaspnetや 'session-per-thread'で 'Session-per-request'を使うと思う。 –
はい、Web上の他の例を見ているでしょう。フォームが開かれるとインスタンス化され(私の場合はリッチクライアントアプリケーション)、フォームが破棄されると閉じられます(セッションを破棄します)。 – John