Я использовал таблицу для каждого подкласса для наследования в своем приложении, как описано в посте Айенде здесь .
Однако, когда я специально запрашиваю подкласс, скажем Company, и фильтрую по Id (который я знаю), полученный SQL-код неверен и выдает ошибку в SQL Server.
Критерии:
session.CreateCriteria<Company>()
.Add(Expression.Eq("Id", 25)
.List<Company>();
Полученный сгенерированный SQL:
SELECT this_.PartyId,
this_.CompanyName
FROM Companies this_
inner join Parties this_1_
on this_PartyId = this_1_.Id
WHERE this_1_.PartyId = 25
Проблема (последняя строка - PartyId не определена в таблице Сторон) заключается в том, что ключевой столбец в дочерней таблице используется в родительской таблице.
Так как «Id» происходит от класса партии в C #, это имеет смысл. Но почему он использует ключевой столбец "PartyId" вместо идентификатора "Id", определенного в отображении партии? И как я могу заставить это работать?
Спасибо!
Редактировать: Как и просили, вот сопоставления (такие же, как в блоге)
<class name="Party"
abstract="true"
table="Parties">
<id name="Id">
<generator class="identity"/>
</id>
<joined-subclass
table="People"
name="Person">
<key column="PartyId"/>
<property name="FirstName"/>
</joined-subclass>
<joined-subclass
table="Companies"
name="Company">
<key column="PartyId"/>
<property name="CompanyName"/>
</joined-subclass>