Как отобразить более глубокую иерархию в nhibernate - PullRequest
2 голосов
/ 05 января 2009

У меня есть этот граф объектов, я хочу отобразить:

  • абстрактный аккаунт (имя пользователя, пароль, ...)
    • реферат Заказчик (корзина, заказы, роли)
      • IndividualCustomer (данные пользователя)
      • CorporateCustomer (разные данные пользователя, данные компании)
    • Администратор (админролес)

Как это можно сопоставить с одной таблицей? (Я знаю, как сделать это с иерархией сущностей, которая имеет глубину только 1 уровень, как в документации, но это не так)

У кого-нибудь есть идея? Я спросил то же самое в http://groups.google.com/group/nhusers/browse_frm/thread/7a85cba0048c18d8?hl=en, но пока не получили полезного ответа.

Ответы [ 2 ]

2 голосов
/ 06 января 2009

вложенные подклассы не соответствуют схеме XML, поэтому я думаю, что это не будет работать. я, вероятно, также должен был бы вложить декларацию дискриминатора, которая также кажется хакерской.

и отображая его полностью ... я передаю дискриминатор для абстрактного класса, который никогда не может быть использован, потому что абстрактный класс не может быть создан. тоже кажется неправильным.

но вы правы, я попробую это когда-нибудь. сейчас мне кажется, что лучше предложить клиенту иметь учетную запись, а не одну.

спасибо!

2 голосов
/ 06 января 2009

Из того, что я вижу, оно не должно отличаться от иерархии на один уровень. попробуйте это:

<hibernate-mapping> 
<class                                                     
    name="Account" 
    table="..." > 
    <property .../> 
        ... 
    <subclass                                              
        name="Customer" > 
        <property ... "/> 
        ... 
    </subclass> 

    <subclass                                              
        name="IndividualCustomer" > 
        <property ... "/> 
        ... 
    </subclass> 
    ... 
</class> 

У меня нет NHibernate здесь, чтобы проверить его, но, похоже, он должен работать. Вы также можете попробовать вложить элементы подкласса, если это не так.

...