我有一个复杂的映射,我相信它应该可以工作。但是,为什么编译后,class 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"/>发布于 2009-11-06 09:46:44
您的代码没有在A类中显示鉴别器列定义,我假设它就在那里。此外,没有“outer join”属性;它应该是fetch="outer-join"。
除此之外,它看起来还可以-- d属性应该在subA上查找,而不是在A上查找。您确定您在发布时没有更改任何内容(我不认为您的真实实体称为A和D,因此请仔细检查您的映射是否确实如图所示)。
另外,为什么要对每个子类的表使用鉴别器?使用joined-subclass使得映射更容易,没有多余的列;鉴别器的唯一优点是避免对子类表进行外连接,这通常不是什么大问题(另外,您也没有在子类上指定fetch="select" )
https://stackoverflow.com/questions/1684822
复制相似问题