1

親子関係があり、子は複合IDを持っています

    <id name="Id" type="Int32">
        <generator class="identity" />
    </id>

<set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" >
  <key column="ParentId"/>
  <one-to-many class="ChildrenClass"/>
</set>

<composite-id unsaved-value="none">
  <key-property name="ParentId"/>
  <key-property name="ChildId"/>
</composite-id>

私が欲しいもの:1)DBから親を取得し、セッションを閉じ、サービスからクライアントに親を渡します2)親がクライアントから戻ったら、新しいセッションで親とそのすべての子をDBに保存します

ステップ2では、var merged = Session.Merge(product);を呼び出します。

NHibに子コレクションの追加/削除された要素を処理させる唯一の方法のように見えるのでMerge()を使用します。しかし、nHibernateは新しく追加された子のすべてのIDをリセットするため、ParentId==0およびChildId==の新しい子があります。 0.問題は、Merge()で渡されるエンティティからIDを保持するようにNHibernateに指示する方法です。..助けてください。

4

1 に答える 1

0

マッピング(およびクラスモデル)が正しくありません。

子には、IDではなく親への参照が必要です。そして、マッピングは<key-many-to-one/>

于 2010-06-21T01:45:12.000 に答える