2011-06-22 23 views
1

私はnhibernateに新しくはありませんが、文字列のコレクションを保存/更新することはできません。Nhibernateは文字列のコレクションを保存しません

私にはエンティティがあり、このエンティティには3つの文字列のコレクション(Iesi.ISet<string>)があります。

エンティティの文字列コレクションを変更し、Session.SaveSession.UpdateSession.SaveOrUpdateを呼び出します。何も機能しません。

これはすべてnhibernateの変換であり、トランザクションはコミットされています。私はそれがNHProfで起こっているのを見ることができます。エラーも例外もありません。 Nhibernateは単に自分のコレクションを無視します。

親エンティティを正常に更新します。

はい、カスケードが設定されています。 save-updateには、Iveもすべて削除を試みました。孤児は、実際には私が望むものです。

エンティティのコレクションはIese.Iset<string>です。これらは、新しいIesi.Collections.Generic.HasheSet<string>()を使用してエンティティのコンストラクタで初期化されます。

私は、マッピングファイルに貼り付けられます:

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NameRemovedV2.Web" namespace="NameRemovedV2.Web.Models"> 
     <class name="NameRemovedUser" table="NameRemovedUsers"> 
     <id name="NameRemovedUserID"> 
      <generator class="hilo"></generator> 
     </id> 
     <many-to-one cascade="save-update" class="NameRemovedSite" column="NameRemovedSiteID" name="Site" not-null="true" foreign-key="FK_NameRemovedSites_NameRemovedUsers"></many-to-one> 
     <property name="Username" not-null="true" unique="true" unique-key="UX_NameRemovedUsers"></property> 
     <property name="FirstName" not-null="false"></property> 
     <property name="LastName" not-null="false"></property> 
     <property name="EmailAddress" not-null="false"></property> 
     <property name="DealerCode" not-null="false"></property> 
     <property name="RegistrationDate" not-null="true"></property> 
     <set cascade="save-update" inverse="true" name="LeftSide" table="LeftSides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_LeftSides"></key> 
      <element column="ElementID" not-null="true"></element> 
     </set> 
     <set cascade="save-update" inverse="true" name="RightSide" table="RightSides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_RightSides" ></key> 
      <element column="ElementID" not-null="true"></element> 
     </set> 
     <set generic="true" cascade="save-update" inverse="true" name="Hide" table="Hides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_Hides" ></key> 
      <element column="ElementID" type="String" not-null="true"></element> 
     </set> 
     </class> 
    </hibernate-mapping> 

答えて

2

私はこの問題は、あなたのセットマッピングでinverse="true"属性だと思います。これは、セッションがフラッシュされたときに、リレーションシップの他の(1つの)側が変更を調べられることをNHibernateに通知します。文字列のセットでは、コレクションに追加する以外は、親に文字列を関連付ける方法はありません。 inverse="true"属性を削除するか、false(デフォルト)に設定してみてください。

+0

ありがとうございました。うまく修正しました。私はいつも逆にfalseを設定するのが適切なのかどうか疑問に思ってきました。 – Erick

関連する問題