0

我有一个复杂的映射,我认为它应该可以工作。但是为什么编译后,类 Ad 列似乎不存在?

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"/>
4

1 回答 1

0

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

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

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

于 2009-11-06T01:46:43.870 回答