NHIbernate <any>картографическая проблема - PullRequest
3 голосов
/ 07 июля 2010

Я использую NHibernate для сайта электронной коммерции и испытываю трудности с получением того, что должно быть простым отображением для работы.По сути, у меня есть объект ContactDetails, который используется для сохранения контактных данных для любого типа пользователя - Покупатель / Продавец / Рекламодатель / и т.д.Я использую любое сопоставление, чтобы в одной таблице могли храниться contact_details для каждого типа.Идентификатор записывается в contact_details_id, а тип (покупатель / продавец / рекламодатель) в поле contact_details_type следующим образом.

<class name="ContactDetails" table="contact_details">

<id name="ID">
  <generator class="hilo" />
</id>

<any name="Party" id-type="System.Int32" meta-type="System.String" cascade="all">
  <meta-value value="buyer" class="Buyer" />
  <meta-value value="seller" class="Seller" />
  <column name="contact_details_type" />
  <column name="contact_details_id" />
</any>

В моем сопоставлении покупателя у меня один на один с контактной информацией, которая выглядит следующим образом

<one-to-one name="ContactDetails" class="ContactDetails" cascade="all" />

Все это выглядит хорошо, и явозможность сохранять контактные данные в базе данных.Моя проблема в том, что когда я пытаюсь загрузить покупателя из базы данных, ContactDetails не возвращается.Вместо присоединения к полю contact_details_id сгенерированный запрос присоединяется к полю ID таблицы contact_details.Я перепробовал все возможное, но что бы ни случилось, я не могу заставить код присоединиться к правильному полю (contact_details_id).Кто-нибудь пытался это сделать, и если да, то как это работает?Пожалуйста, дайте мне знать, если требуются дополнительные детали.

Заранее спасибо,

JP

1 Ответ

2 голосов
/ 09 июля 2010

one-to-one не поддерживается для неявного полиморфизма.

Альтернативы:

  • Создать суперкласс из Buyer и Seller, если у вас его нет (выможно назвать это Party), отобразить иерархию, используя любую стратегию, кроме неявной, и использовать обычные отношения one-to-one или many-to-one вместо any (предпочтительно)
  • Не отображать отношенияв Buyer и используйте вместо этого запрос

(ограничения подхода неявного полиморфизма выделены здесь: http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations)

...