2

给定表格:

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,也没有多对一的方式来指定表。那么,如何通过中间连接表映射单个实体呢?

4

1 回答 1

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)。

于 2013-01-16T17:16:44.630 回答