2012-03-10 12 views
0

データベースからContact-objektを読み込みます。オブジェクトの連絡先はContactSecurityに1対多のマッピングを持っています新しいオブジェクトを参照する既存のオブジェクトをマージする

<set name="ContactSecuritys" lazy="true" inverse="true" cascade="none" > 
     <key> 
      <column name="ContactId"/> 
     </key> 
     <one-to-many class="ContactSecurity"/> 
    </set> 

さて、私がやろう:

contact.ContactSecuritys.Add(new ContactSecurity(Guid.NewGuid())); 
Session.Merge(contact); 

しかし、これはTransientObjectExcpeption「オブジェクトが保存されていない一時的なインスタンスで投げている - 保存します合併前に一時的なインスタンス:Prayon.Entities.ContactSecurity」

は、私はまた、

contact.ContactSecuritys.Add(new ContactSecurity(Guid.NewGuid()) {Contact = contact}); 
Session.Merge(contact); 
を試してみました

私は間違っていますか? - 連絡先をマージする前に、参照先の連絡先と新しいContactSecurity-Objectを別に保存する必要がありますか? - これを行う簡単な方法がありますか?

ありがとうございました。

答えて

1

"ContactSecurity"は新しい一時オブジェクトなので、私はそれを考えます。同じ識別子を持つエンティティが既に永続化されている場合は、 "session.Merge()"を使用できますが、そのような識別子を持つエンティティは存在しません。セッションに一時オブジェクトを添付するには、 "session.Persist(ContactSecurity)"を使用します。

var contactSecurity = new ContactSecurity(Guid.NewGuid()); 
Session.Persist(contactSecurity); 

contact.ContactSecuritys.Add(contactSecurity); 
Session.Merge(contact); 

一般的に私はなぜあなたが "session.Merge()"を使用しているのか分かりません。 実体「接触」は、トランザクションの最後に「session.Flushを()」を使用することができ、そして「session.Merge()」と呼んでいない永続オブジェクトの場合:

+0

session.Persist()を使用すると、contactSecurityにnull値のプロパティがないという問題があります。これはSave-Eventで設定されます。 – BennoDual

2

あなたの問題ではありませんContactSecurityによって引き起こされます。 カスケード設定を少なくとも-cascade="save-update"に変更して、メインクラスがそのプロパティに他のオブジェクトを更新して挿入できるようにする必要があります。

関連する問題