2009-11-06 3 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

답변

0

코드에 A 클래스의 판별 자 열 정의가 표시되지 않는다고 가정합니다. 또한 "외부 조인"속성은 없습니다. 대신 fetch="outer-join"이어야합니다.

그 외에도 괜찮은 것처럼 보입니다. - d 속성은 subA이 아니고 A이 아니어야합니다. 게시했을 때 아무 것도 변경하지 않았습니까? (실제 엔티티가 AD이라고 생각하지 않으므로 매핑이 실제로 표시된대로 중복되는지 확인하십시오).

또한 왜 table-per-subclass에 discriminator를 사용하고 있습니까? joined-subclass을 사용하면 불필요한 열없이 쉽게 매핑 할 수 있습니다. discriminator의 유일한 장점은 서브 클래스 테이블의 외부 조인을 피하는 것입니다 (대개 큰 문제는 아닙니다).

관련 문제