Попытка сопоставить несколько сумок с одной и той же таблицей - не удалось лениво инициализировать коллекцию исключений ролей - PullRequest
0 голосов
/ 29 июля 2010

У меня проблема с отображением в 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, со столбцами 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>

1 Ответ

1 голос
/ 29 июля 2010

Похоже, что SecondItems и ThirdItems лениво выбираются после закрытия сессии, что недопустимо.Вам нужно либо принудительно извлечь выборку во время активного сеанса, либо изменить сопоставления, чтобы отключить отложенную выборку (по умолчанию).

См. здесь для получения дополнительной информации.

...