2010-07-29 56 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

相关问题