NHIbernate 1.2 и ленивая загрузка - PullRequest
0 голосов
/ 02 августа 2011

У меня возникла необычная проблема - я уверен, что сейчас упускаю что-то очень простое!В частности, две таблицы:

   <class name="Proposal" table="Proposal">
      <id name="Id" column="ProposalId">
         <generator class="identity" />
      </id>

      <property name="QuotationNumber" column="QuotationNumber" access="nosetter.camelcase-underscore" />

      <set name="DataItems" table="ProposalData" inverse="true" cascade="save-update" access="nosetter.camelcase-underscore" lazy="true">
         <key column="ProposalId" />
         <one-to-many class="Fortron.Fastr.Domain.Proposal.ProposalData, Fortron.Fastr.Domain"/>
      </set>
   </class>

и

   <class name="ProposalData" table="ProposalData">
      <id name="Id" column="ProposalDataId">
         <generator class="identity" />
      </id>
      <many-to-one name="Proposal" column="ProposalId" class="Fortron.Fastr.Domain.Proposal.Proposal, Fortron.Fastr.Domain" />

   </class>

Мне кажется, есть именованный запрос в моем файле .HBM.XML, как показано ниже:

  FROM Proposal MSP
  JOIN FETCH MSP.DataItems Items

Если я не собираюсь говорить о нём, учитывая, что Предложение является одним-ко-многим с ProposalData, NH должен загрузить каждый из объектов Предложения, а также Данные для каждого в виде коллекции.К сожалению, я получаю повторяющиеся результаты, так как для каждого предложения есть несколько ProposalData.

Насколько я понимаю, это не должно быть проблемой.Если бы у ProposalData была таблица «один ко многим» с другой таблицей, то получился бы декартовой продукт, и можно ожидать вышеприведенного.

Я ошибаюсь?Кто-нибудь может пролить свет?

Спасибо.

1 Ответ

1 голос
/ 02 августа 2011

JOIN FETCH означает, что элементы объединены и также используются для их получения.Это приводит к умножению предложений.Примечание: дубликаты остаются в памяти теми же экземплярами.

Исправьте это, используя DistinctRootEntityTransformer или избегая join fetch.

...