我有以下映射类:
<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)既是会计公司又是客户端,当我在调查公司作为CompanyAccounting后调用Session.Get时它不会去回到数据库并检查是否有CompanyClient的条目,它假定公司只能在子类上,是否有指定它可以从所有子类继承?
答案 0 :(得分:0)
我最终做的是重构我的课程,而不是
类公司, class CompanyClient:公司, class CompanyAccounting:Company
我使CompanyClient和CompanyAccounting不从公司继承,并将公司添加为<one-to-one>
关系,这是这些类的主键。