1

私は NHibernate に非常に慣れていないので、子オブジェクトのリストを保存しているときに問題が発生しています。

ノート

<class name="Note" table="NOTE">        
     <id name="NoteID" column="NOTE_ID">
          <generator class="identity" />
     </id>          
     ...    
     <list name="Sections" table="NOTE_SECTIONS" cascade="all" lazy="false">
          <key column="NOTE_ID"/>               
          <index column="SORT_ORDER"/>
          <one-to-many class="Section"/>
     </list>
</class>

注記セクション

<class name="Section" table="NOTE_SECTIONS"> 
     <id name="SectionID" column="Section_ID">
          <generator class="identity" />
     </id>      
     <property name="NoteID" column="NOTE_ID"/>
     ...
</class>

マッピングは、データの読み取りに完全に機能します。ただし、に変更を加えると、Note Section生成されるクエリは適切な手順を実行しているように見えますが、次のエラーが発生します。

NHibernate.Exceptions.GenericADOException: コレクションを削除できませんでした: [Domain.Note.Sections#1][SQL: UPDATE NOTE_SECTIONS SET NOTE_ID = null, SORT_ORDER = null WHERE NOTE_ID = @p0] ---> System.Data.SqlClient.SqlException : 列 'NOTE_ID'、テーブル 'NOTE_SECTIONS' に値 NULL を挿入することはできません。列はヌルを許可しません。更新は失敗します。

このように保存するには、双方向である必要があることを読みましたしかし、双方向マッピングはリストでは機能しないことも読みました。コレクションの順序を維持することが重要です。保存する最善の方法は何ですか?

4

2 に答える 2

1

inverse="true"この方法で子オブジェクトを保存する場合は、コレクション マッピングでを使用する必要があります。

 <list name="Sections" table="NOTE_SECTIONS" inverse="true" cascade="all" lazy="false">
      <key column="NOTE_ID"/>               
      <index column="SORT_ORDER"/>
      <one-to-many class="Section"/>
 </list>

Hibernate の逆属性

于 2012-04-09T11:45:30.913 に答える
0

おそらく、Note セクションの Note を多対 1 の関係として参照する必要があります。

于 2012-04-09T02:57:26.403 に答える