2009-11-06 135 views
0

我有一个复杂的映射,我认为应该工作。但是为什么在编译之后,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

你最好减少映射到所需的最小数量重现错误并发布该信息,并发布您收到的确切错误消息。 – Jherico 2009-11-06 02:06:16

回答

0

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

除此之外,它看起来不错 - d财产应该在subA,而不是A。你确定你没有改变任何东西吗(我不认为你真的实体被称为AD,所以仔细检查你的映射确实如图所示)。

此外,为什么你使用鉴别器的每个子类?使用joined-subclass可以使不需要多余列的映射更容易;鉴别器的唯一好处是避免外部连接到子类表上,这通常不是什么大问题(再加上你没有在你的子类上指定fetch="select"