鉴于表格:
TableA
aId
...
TableB
bId
...
TableC
aId
cId // Maps to TableB.bId
换句话说,TableA和TableB仅通过TableC中的条目相关联。
我想要以下课程:
public class ClassA
{
aId
...
}
public class ClassB
{
bId
...
}
public class ClassD : ClassA
{
ClassB
}
因此,ClassD具有ClassA的所有属性,并添加了单个ClassB实例。
我最初的想法是使用:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="false" xmlns="urn:nhibernate-mapping-2.2">
<class name="ClassD" lazy="false" table="TableA" polymorphism="explicit">
<id name="aId" column="aId" type="Guid">
<generator class="CustomGuidGenerator" />
</id>
...
<many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
</class>
</hibernate-mapping>
显然,在这个映射中,TableA中没有cId,也没有多对一的方法来指定表。那么,如何通过中间连接表映射单个实体?
答案 0 :(得分:1)
不确定表中究竟是什么(TableC.aId是对TableA.aId的引用吗?),但也许你可以选择每子类表策略(参见例如http://docs.huihoo.com/hibernate/nhibernate-reference-1.2.0/inheritance.html)
<class name="ClassA" table="TableA">
<id name="aId" column="aId" type="Guid">
<generator class="CustomGuidGenerator" />
</id>
<joined-subclass name="ClassD" table="TableC">
<key column="aId"/>
<many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
</joined-subclass>
</class>
关于ClassB
,它应该有自己的映射文件,系统将能够计算多对一ClassB
属性的表名(TableB)。