У меня есть следующие сопоставленные классы:
<class name="Company" table="Company">
<id name="ID" column="CompanyID">
<generator class="native"/>
</id>
<joined-subclass name="CompanyAccounting" table="company_accounting" lazy="true">
<key column="CompanyID"/>
</joined-subclass>
<joined-subclass name="CompanyCarbon" table="company_carbon" lazy="true">
<key column="CompanyID" />
</joined-subclass>
</class>
Теперь следующий тест не пройден:
var company = CompanyAdapter.Get<Company>(_session, 32);
Assert.IsNotNull(company);
var client = CompanyAdapter.Get<CompanyClient>(_session, 32);
Assert.IsNotNull(client);
Но следующее успешно:
var client = CompanyAdapter.Get<CompanyClient>(_session, 32);
Assert.IsNotNull(client);
var company = CompanyAdapter.Get<Company>(_session, 32);
Assert.IsNotNull(company);
Причина, по которой первый тест не пройден, заключается в том, что NHibernate извлекает Company как CompanyAccounting, поскольку Company (32) является как бухгалтерской компанией, так и клиентом, и когда я вызываю Session.Get после того, как он получил компанию как CompanyAccounting, он не идет вернуться к базе данных и проверить, есть ли запись для CompanyClient, предполагается, что Company может быть только на подклассе, есть ли способ заставить его указать, что он может наследовать от всех подклассов?