1

こんにちは、次のシナリオで子オブジェクトの更新に問題があります。

マッピングは次のとおりです。

親: カレンダー

  <bag name="defaultCategories"  inverse="true" lazy="false" 
    cascade="all-delete-orphan">
  <key column="parentID" />
  <one-to-many class="DefaultCategory"/>
  </bag>

子: DefaultCategory

<class name="DefaultCategory" table="tb_calendar_default_category" lazy="false">

<id name="id" column="id">
  <generator class="hilo"/>
</id>

<many-to-one name="calendar" column="parentID" not-null="true" 
 cascade="all-delete-orphan" />

カレンダーの更新に使用されるコード:

public Calendar Update(Calendar vo)
    {
        session = NHibernateHelper.GetCurrentSession();

        tx = session.BeginTransaction();
        using (tx)
        {

            session.Update(vo);

            tx.Commit();
        }

        return vo;
    }

問題は、UI を介して defaultCategories を追加または削除し、更新されたバージョンのカレンダーをバックエンドに送り返すと、NHibernate が更新されたカレンダーを返し、すべてが正常に見えることです。ただし、削除されるべき defaultCatergories は、デフォルトの Categories テーブルに残されます。したがって、UI を更新してカレンダーを再度呼び出すと、コレクションが変更されていないことがわかります。

すべての defaultCatergories を parentID で削除してから再作成する必要があると思いますか? 私はNHibernateがあなたのためにこれを処理したという印象を受けましたか? どんな助けや指針も大歓迎です。

4

2 に答える 2

1

NHibernate が Calendar を既存のインスタンスとして認識していないのだろうか。ドキュメントのこのセクションを見て、unsaved-value 属性をマッピングに追加すると役立つかどうかを確認してください。

于 2009-02-25T03:48:30.903 に答える
1

デフォルトのフラッシュモードは OnCommit ですか? そうでない場合は、コミットする前にセッションをフラッシュして問題を解決することができます。

あなたがしていることはうまくいくはずです。

于 2009-02-25T15:15:04.480 に答える