Рассмотрим файл сопоставления ниже. Оба класса имеют разное представление о том, что такое businessId, который обрабатывает объектная модель, но допустимо хранить его в виде простой строки в одном столбце. Я также хочу, чтобы у каждого из них были одинаковые отношения с набором Allocations, и это главная причина, по которой я хочу, чтобы они отображались с использованием наследования.
Несмотря на то, что шансы бизнес-идентификатора для Проекта, такого же, как у Учетной записи, сегодня являются удаленными, было бы идеально, если бы был способ сделать сочетание businessId и дискриминатора как части натурального id. Это недопустимо, возможно, по какой-то веской причине, которую я не вижу.
Могу ли я улучшить это отображение каким-то очевидным способом?
Приветствия
Berryl
<class name="ActivitySubject" table="ActivitySubjects" discriminator-value="BASE_CLASS">
<id name="Id" unsaved-value="0">
<column name="ActivitySubjectId" />
<generator class="hilo" />
</id>
<discriminator column="ActivitySubjectType" type="System.String" />
<natural-id mutable="true">
<property name="BusinessId" length="25" not-null="true" />
</natural-id>
<property name="Description" length="75" not-null="true" />
<set access="field.camelcase-underscore" cascade="all-delete-orphan" inverse="true" name="Allocations">
<key foreign-key="Allocations_Resource_FK">
<column name="ActivityId" />
</key>
<one-to-many class="Allocation />
</set>
<subclass name="Account" discriminator-value="ACCOUNT" />
<subclass name="SProject" discriminator-value="PROJECT" />
Вот как я наконец получил оба столбца в одном и том же уникальном индексе:
<discriminator type="System.String" >
<column name="ActivitySubjectType" unique-key="ActivitySubjectTypeBusinessId" />
</discriminator>
<property name="BusinessId" length="25" not-null="true" node="1" unique-key="ActivitySubjectTypeBusinessId"/>