Nhibernate 尝试将多个包映射到同一个表-未能延迟初始化角色异常集合
我对nhibernate中的映射有问题。我使用的是NHibernate2.2版本 似乎问题出在映射上,但我不确定这是否是原因。无论如何,我有两个表,我想映射。我为第一个表和一个数据传输对象创建了一个hbm文件。所有列都已映射,并且在这里一切正常 但是,现在我想在这个类中添加三个包,它们将指向同一个表,我想连接的第二个表。我创建了包并映射了所有内容,但当我检索数据时,这些包中只有一个被填满,而其他的则为空,我收到一个错误“未能延迟初始化角色集合:com.organic.mitsu.hib.ModelContent.options-未关闭任何会话或会话”。我100%确信我数据库中的数据是好的。当我从地图上取下两个袋子时,一切正常,只剩下一个袋子。以下是hbm文件:Nhibernate 尝试将多个包映射到同一个表-未能延迟初始化角色异常集合,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我对nhibernate中的映射有问题。我使用的是NHibernate2.2版本 似乎问题出在映射上,但我不确定这是否是原因。无论如何,我有两个表,我想映射。我为第一个表和一个数据传输对象创建了一个hbm文件。所有列都已映射,并且在这里一切正常 但是,现在我想在这个类中添加三个包,它们将指向同一个表,我想连接的第二个表。我创建了包并映射了所有内容,但当我检索数据时,这些包中只有一个被填满,而其他的则为空,我收到一个错误“未能延迟初始化角色集合:com.organic.mitsu.hib.Mode
<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" />
实际上,我尝试映射的最初内容是使用composite元素,而不使用MySecondTable的映射。我只有一个dto类项,带有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>
听起来第二项和第三项是在会话关闭后延迟获取的,这是不允许的。您需要在会话处于活动状态时强制抓取,或者更改映射,以便禁用延迟抓取(默认设置)
有关更多详细信息,请参阅。我尝试强制抓取,但没有解决问题。我忘了说我的ThirdItems集合只填充了数据,第一个和第二个都是空的。你在使用事务吗?您是如何\在哪里强制抓取的?我在检索数据时使用了事务。我试图在映射文件中强制抓取。您可以通过访问事务中的属性来进行抓取吗?项目的映射是什么?它也有关系吗?项没有映射。只是一个表示表的列的类。这不对吗?我找到了另一种破解方法,但我想知道我哪里做错了,如果有可能这样做,三个包引用同一个表。MySecondTable的映射是什么?