Вот вариант, с таблицей на иерархию. Я предполагаю:
- собственность имеет свой собственный идентификатор (
OwnerShipId
, автоматически сгенерированный)
- у вас есть столбец за ссылочный класс/таблиц (
BikeId, CarId
), для обработки различных типов ключей и внешние ключей
отображение будет выглядеть примерно так:
<class lazy="false" name="Domain.OwnerShip, Domain" table="OwnerShip_Table" discriminator-value="0">
<id name="Id" column="OwnerShipId" type="System.Int32" access="property">
<generator class="identity"></generator>
</id>
<discriminator column="VehicleTypeCode" type="int"/>
<many-to-one name="Owner" column="PersonId" not-null="true" fetch="..."/>
<many-to-one name="CodeType" column="VehicleTypeCode" not-null="true" fetch="..." />
<subclass name="Domain.BikeOwnerShip, Domain" discriminator-value="1">
<many-to-one name="Bike" column="BikeId" not-null="true" fetch="..."/>
</subclass>
<subclass name="Domain.CarOwnerShip, Domain" discriminator-value="2">
<many-to-one name="Car" column="CarId" not-null="true" fetch="..."/>
</subclass>
</class>
Я думаю, было бы также неплохо иметь виртуальный, не сопоставляется, OwnedObject
свойства в базовом классе, что-то вроде
public virtual Object OwnedObject{
get{return null;}
}
в CarOwnership
классе реализация OwnedObject будет
public override Object OwnedObject{
get{return this.Car;}
}
Надеется, что это поможет
Опубликуйте .hbm.xml позже. Кажется, что я должен использовать сопоставление наследования, но какой тип сопоставления лучше всего: таблица для конкретного класса? Или используя неявный полиморфизм (см. Ссылку выше)? –
Должен признаться, эта модель кажется мне немного странной. Я бы ввел класс Vehicle как суперкласс автомобиля/велосипеда/sb. Этот класс будет содержать логику typecode. Тогда вы можете положиться на стратегию «таблица на иерархию» – jbl
Фактически, Car/Bike/Skateboard - это просто образец. В нашем реальном приложении реальные объекты сильно отличаются. Например, даже Идентификатор каждого класса отличается - некоторые используют Int64, некоторые используют GUID ... Чтобы спросить, я упростил их как Car/Bike/Skateboard. –