nHibernate 2.0 - отображение составного идентификатора * и * многие-к-одному приводит к ошибке «неверный индекс» - PullRequest
20 голосов
/ 31 января 2009

У меня проблема. Представьте себе эту модель данных:

[Person] table has: PersonId, Name1  
[Tag] table has:  TagId, TagDescription  
[PersonTag] has: PersonId, TagId, IsActive

Поскольку [PersonTag] - это не просто простая таблица соединения многих ко многим, у меня есть все три сущности, созданные в nHibernate (точно так же, как в модели данных). PersonTag, следовательно, нужен составной идентификатор, который я сопоставил с классом, подобным этому:

<composite-id name="PersonTagKey" class="PersonTagKey">
  <key-property name="PersonId"></key-property>
  <key-property name="TagId"></key-property>
</composite-id> 

Я хочу пройти по графу объектов и иметь возможность просматривать объекты Person и Tag из найденного объекта PersonTag. Итак, у меня есть свойства объекта PersonTag для этого, сопоставленные так:

<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>

Когда я пытаюсь создать объект PersonTag и сохранить его, я получаю "Недопустимый индекс n для этой SqlParameterCollection с ошибкой Count = n" . Я знаю, что это потому, что я сопоставил свойства PersonId и TagId дважды, один раз для составного идентификатора и один раз для отношения многие-к-одному. Если я не сопоставляю объекты «многие к одному», то все работает нормально.

Есть ли какой-то способ для меня иметь возможность иметь составной идентификатор и отношение многие-к-одному на основе того же столбца, смоделированного в той же сущности nHibernate?

1 Ответ

28 голосов
/ 02 февраля 2009

Кей, вот ответ. Практическая документация по этому вопросу:

<composite-id name="PersonTagKey" class="PersonTagKey"> 
  <key-many-to-one name="Person" column="PersonId" lazy="proxy" class="Person">
  <key-many-to-one name="Tag" column="TagId" lazy="proxy" class="Tag"/>
</composite-id>

Это позволит вам создать составной идентификатор, состоящий из инверсии отношения «многие к одному».

Удачной охоты ...

...