Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 尝试将多个包映射到同一个表-未能延迟初始化角色异常集合_Nhibernate_Nhibernate Mapping - Fatal编程技术网

Nhibernate 尝试将多个包映射到同一个表-未能延迟初始化角色异常集合

Nhibernate 尝试将多个包映射到同一个表-未能延迟初始化角色异常集合,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我对nhibernate中的映射有问题。我使用的是NHibernate2.2版本 似乎问题出在映射上,但我不确定这是否是原因。无论如何,我有两个表,我想映射。我为第一个表和一个数据传输对象创建了一个hbm文件。所有列都已映射,并且在这里一切正常 但是,现在我想在这个类中添加三个包,它们将指向同一个表,我想连接的第二个表。我创建了包并映射了所有内容,但当我检索数据时,这些包中只有一个被填满,而其他的则为空,我收到一个错误“未能延迟初始化角色集合:com.organic.mitsu.hib.Mode

我对nhibernate中的映射有问题。我使用的是NHibernate2.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" />

实际上,我尝试映射的最初内容是使用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的映射是什么?