Несколько вещей, чтобы попробовать:
- На каждой из карт подклассов установите имя таблицы с помощью
WithTableName("Author")
- Является ли
person_id
ключевым столбцом в каждой таблице подклассов? Если нет, измените base("person_id")
на base("key column name")
Например, я только что протестировал очень похожий запрос со следующими сопоставлениями:
public class DigitalFreeSubscriptionMap : JoinedSubClassPart<DigitalFreeSubscription>
{
public DigitalFreeSubscriptionMap()
: base("DigitalFreeSubscriptions")
{
WithTableName("DigitalFreeSubscriptions");
...
и
public class FreeSubscriptionMap : JoinedSubClassPart<FreeSubscription>
{
public FreeSubscriptionMap()
: base("FreeSubscriptions")
{
WithTableName("FreeSubscriptions");
...
Оба являются подклассами Subscription
. В базе данных, которую я тестировал, есть 1700 подписок DigitalFreeSubscription, а подписок FreeSubscrips (и других видов подписок) более миллиона. HQL-запрос "FROM DigitalFreeSubscripion
" вернул 1700 результатов.
По запросу, верхняя часть карты подписки:
public class SubscriptionMap : AuditableClassMap<Subscription>
{
public SubscriptionMap()
{
WithTable("Subscriptions");
Id(x => x.Id, "Subscriptions");
AddPart(new FreeSubscriptionMap());
AddPart(new DigitalFreeSubscriptionMap());
// More sublass mappings and then the field mappings