2009-11-06 3 views
0

У меня сложное отображение, которое, я считаю, должно работать. Но почему, после компиляции, кажется, что столбца класса A.d не существует?Индивидуальное сопоставление подкаталогов Hibernate

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

ответ

0

Ваш код не отображается дискриминатор определения столбца в A классе, я предполагаю, что это там. Также нет атрибута «external-join»; это должно быть fetch="outer-join".

Другое, тогда это выглядит нормально - d Недвижимость должна быть поднята на subA, а не A. Вы уверены, что ничего не изменили, когда вы разместили (я не думаю, что вы являетесь реальными сущностями, называемыми A и D, поэтому дважды проверьте, что отображение действительно так, как показано).

Кроме того, почему вы используете дискриминатор для таблицы за подкласс? Использование joined-subclass упрощает сопоставление без лишних столбцов; единственное преимущество дискриминатора - избегать внешнего соединения на таблицах подкласса, что обычно не является большой сделкой (плюс вы не указали fetch="select" на свой подкласс в любом случае)