Hibernate子类一对一映射

时间:2009-11-06 01:25:46

标签: hibernate subclass one-to-one

我有一个复杂的映射,我认为应该可行。但是,为什么在编译之后,类A.d列似乎不存在?

public abstract Class A {
private Integer Id;
..
...
}

public Class SubA extend A {
   private D d;
}

public Class D {
   private SubA subA;
}

A.hbm.xml
<class name="A" table="A" abstract="true"/>

...

<subclass 
        name="SubA" 
        discriminator-value="SUB_A"
        lazy="false"
    >
        <join table="TABLE_SUB_A">
                <key column="ID"/>

            <many-to-one name="d" 
        column="COL_D" 
                class="D"
                cascade="NONE"
                outer-join="true"
                unique="true"/>
        </join>
   </subclass>
   </class>

D.hbm.xml
<one-to-one name="subA"
   class="SubA"
   property-ref="d"/>

1 个答案:

答案 0 :(得分:0)

您的代码未在A类中显示鉴别器列定义,我假设它在那里。此外,没有“外连接”属性;它应该是fetch="outer-join"而已。

除此之外,它看起来还不错 - d属性应该在subA上查找,而不是A。你确定你发布时没有改变任何东西(我不认为你真正的实体被称为AD,所以请仔细检查你的映射确实如图所示。 / p>

另外,为什么在每个子类的表中使用discriminator?使用joined-subclass可以更轻松地进行映射,而不需要多余的列;鉴别器的唯一优点是避免在子类表上进行外连接,这通常不是什么大问题(另外你还没有在你的子类上指定fetch="select"