Подкласс NHibernate с таблицей соединений с пакетом задач подкласса - PullRequest
1 голос
/ 23 февраля 2011

Привет, ребята. У меня есть модель этого типа

public abstract class BaseEntity
{
    public Guid Id {get; set;}
}

class EntityA : BaseEntity
{
    ..other properties..
    IList<EntityB> BEntities {get; set;}
}

class EntityB : BaseEntity
{
    ..other properties..
    EntityA Owner {get, set;}
}

, отображаемая следующим образом:

  <class name="BaseEntity" abstract="true" table="TBL_BaseEntity"
         dynamic-insert="true" dynamic-update="true" lazy="true" >
    <id name="Id"
        column="ID_ENTiTY"
        type="guid"
        unsaved-value="00000000-0000-0000-0000-000000000000">
      <generator class="guid.comb" />
    </id>

    <discriminator column="EtityType" type="string" force="true" />
  </class>

<subclass name="EntityA"
            extends="BaseEntity"
            discriminator-value="A"
            dynamic-insert="true"
            dynamic-update="true"
            lazy="true">

    <join table="TBL_ENTITYA">
      <key column="ID_ENTITYA" />

      ...other mapped properties...

      <bag name="BEntities" cascade="save-update"
           lazy="true" inverse="true" fetch="select" outer-join="true" >
        <key column="ID_ENTITYA" />
        <one-to-many class="EntityB"/>
      </bag>
    </join>
  </subclass>

<subclass name="EntityB"
            extends="BaseEntity"
            discriminator-value="B"
            dynamic-insert="true"
            dynamic-update="true"
            lazy="true">

    <join table="TBL_ENTITYB">
      <key column="ID_ENTITYB" />

      ...other mapped properties...

      <many-to-one name="Owner" not-null="true"
                   lazy="proxy" fetch="select" column="ID_ENTITYA" />
    </join>
  </subclass>

Теперь проблема заключается в том, когда я пытаюсь вставить и каскадировать новую EntityA сКоллекция EntityB правильно инициализирована (с точки зрения двунаправленной ассоциации), все работает, но когда я пытаюсь прочитать коллекцию EntityA.BEntities, я получил исключение, в котором говорится, что NH может выполнить запрос.После того, как возникла проблема с NHProf, я увидел, что полученный запрос некорректен, потому что NH добавляет столбец ID_ENTITYA к базовой таблице (которая явно не имеет этого столбца), а не к целевой таблице присоединенных подклассов.Кто-нибудь может помочь мне об этой проблеме?Как я могу избежать такого поведения?Это возможно сделать в NH?

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

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Мы только что столкнулись с той же проблемой здесь, и мой коллега нашел это решение:

Создание двунаправленного отношения «многие к одному» на EntityB обратно к EntityA.

Это, кажется, помогает NH выяснить, что существует отношение FK между EntityA и EntityB, а не BaseEntity & EntityB.

Надеюсь, это поможет.

0 голосов
/ 09 марта 2011

Я недавно столкнулся с той же проблемой и представил проблему для этого:

https://nhibernate.jira.com/browse/NH-2564

...