2010-07-29 61 views
0

我有一個在nhibernate中映射的問題。我使用的是nhibernate 2.2版本。試圖用同一張表映射幾個包 - 未能懶洋洋地初始化一個角色異常集合

似乎問題是在映射,但我不知道這是什麼原因。無論如何,我有兩張我想要繪製的表格。我爲第一個表和一個數據傳輸對象創建了一個hbm文件。所有列都被映射,並且在這裏一切正常。

但是,現在我想爲這個班級添加三個行李,這個行李將指向同一個表格,我想要連接的第二個表格。我創建了包並映射了所有內容,但是當我檢索我的數據時,只有其中一個包被填充,而其他包被填充爲空,並且出現錯誤「未能延遲初始化角色集合:com.organic.mitsu .hib.ModelContent.options - 沒有會話或會話已關閉「。我100%肯定我的數據庫數據是好的。當我從地圖上移除兩個行李時,一切正常,只剩一個行李。這裏是HBM文件:

<class name="MyFirstClass" table="MyFirstTable"> 
<id name="ID"> 
    <generator class="native" /> 
</id> 
<property name="ItemOne" /> 
<property name="ItemTwo" /> 
<property name="ItemThree" /> 
<property name="ItemFour" /> 

<bag name="FirstItems" table="MySecondTable"> 
    <key column="ItemID" property-ref="ItemOne"/> 
    <one-to-many class="Items" not-found="ignore"/> 
</bag> 

<bag name="SecondItems" table="MySecondTable"> 
    <key column="ItemID" property-ref="ItemTwo"/> 
    <one-to-many class="Items" not-found="ignore"/> 
</bag> 

<bag name="ThirdItems" table="MySecondTable"> 
    <key column="ItemID" property-ref="ItemThree"/> 
    <one-to-many class="Items" not-found="ignore"/> 
</bag> 

我應該如何解決這個問題?這甚至有可能這樣做嗎?

這裏是爲MySecondTable映射:

<class name="Item" table="MySecondTable"> 
<id name="ID"> 
    <generator class="assigned" /> 
</id> 
<property name="ItemID" /> 
<property name="Language" /> 
<property name="Value" /> 

其實,我試圖映射原來事情是複合元素,而無需MySecondTable的映射。我只有一個dto類Item,帶有ItemID和Value列。我得到了同樣的錯誤,並映射如下所示:

<class name="MyFirstClass" table="MyFirstTable"> 
<id name="ID"> 
    <generator class="native" /> 
</id> 
<property name="FirstItem" /> 
<property name="SecondItem" /> 
<property name="ThirdItem" /> 

<bag name="FirstItemNames" table="MySecondTable"> 
    <key column="ItemID" property-ref="FirstItem"/> 
    <composite-element class="Item"> 
    <property name="Value" /> 
    </composite-element> 
</bag> 

<bag name="SecondItemNames" table="MySecondTable"> 
    <key column="ItemID" property-ref="SecondItem"/> 
    <composite-element class="Item"> 
    <property name="Value" /> 
    </composite-element> 
</bag> 

<bag name="ThirdItemNames" table="MySecondTable"> 
    <key column="ItemID" property-ref="ThirdItem"/> 
    <composite-element class="Item"> 
    <property name="Value" /> 
    </composite-element> 
</bag> 

+0

什麼是MySecondTable的映射? – apollodude217 2010-07-29 16:20:01

回答

1

聽起來就像是SecondItems和ThirdItems是是否在提取後懶洋洋地會話被關閉,這是不允許的。您需要在會話處於活動狀態時強制進行抓取,或者更改映射,以便關閉懶惰抓取(默認設置)。

有關更多詳細信息,請參閱here

+0

我試圖用力取出並沒有解決問題。我忘了說我的ThirdItems集合只填充數據,First和Second是空的。 – Behemoth 2010-07-29 14:08:36

+0

您是否使用交易?你在哪裏強迫抓取? – 2010-07-29 14:28:20

+0

我在檢索數據時正在使用事務。我試圖強制在映射文件中獲取。 – Behemoth 2010-07-29 15:00:42

相關問題