2011-08-22 97 views
0

我有以下3個類。NHibernate +多對多+包+映射表

BusinessStream 
Scheme 
Bus_Stream_Scheme_Map 

當我嘗試執行transaction.Commit()方法,session.SaveOrUpdate()BusinessStream後,我得到以下錯誤,

不能將NULL插入( 「DBO」。 「BUS_STREAM_SCHEME_MAP」。 「BUS_STREAM_SCHEME_MAP_ID」)

HBM文件,

BusienssStream

<class name="BusinessStream" table="BUS_STREAM"> 
<id name="Id" column="BS_ID" type="Int32" > 
    <generator class="sequence"> 
    <param name="sequence">BUS_STREAM_SEQ</param> 
    </generator> 
</id> 
<property name="Name" column="Name" type="String"/> 
<property name="Description" column="Description" type="String"/> 
<bag name="Schemes" table="BUS_STREAM_SCHEME_MAP" lazy="false"> 
    <key column="BUS_STREAM_ID"></key> 
    <many-to-many class="Scheme" column="SCHEME_ID"></many-to-many> 
</bag> 

</class> 

方案

<class name="Scheme" table="SCHEME_DEF"> 
    <id name="Id"> 
    <column name="SCHEME_ID"/> 
    <generator class="native"> 
      <param name="sequence">SCHEME_DEF_SEQ</param> 
    </generator> 
</id> 
    <property name="Description" column="SCHEME_DESC" type="String"/> 
</class> 

BusinessStream_Scheme_Map

<class name="BusinessStreamSchemeMapping" table="BUS_STREAM_SCHEME_MAP"> 
<id name="Id"> 
    <column name="BUS_STREAM_SCHEME_MAP_ID"/> 
    <generator class="native"> 
    <param name="sequence">BUS_STREAM_SCHEME_MAP_SEQ</param> 
    </generator> 
</id> 
</class> 

我在做什麼錯?

+1

自從我和NHibernate一起工作以來,我一直記得,如果沒有關聯表的映射條目,多對多關係可以被映射。您的業​​務邏輯和/或其他用例需要映射「BusinessStreamSchemeMapping」嗎? –

+0

我們正在辯論,看看我們是否可以避免地圖類/表。謝謝你的評論。 – Pak

回答

0

這只是一個猜測,但如果您將BUS_STREAM_SCHEME_MAP_ID設置爲自動遞增字段,它會起作用嗎?

+0

按照設計,我們使用Oracle的Sequence對象來生成主鍵字段的ID。所以,如果我直接在'BusinessStreamSchemeMapping'對象上執行SaveOrUpdate(),那麼它就起作用了。它在'BUS_STREAM_SCHEME_MAP'表中創建一個新行。但不知怎麼的,當這個類被用在''中時,它不會這樣做。 – Pak