2012-11-06 3 views
0

여기 내 작업에 대한 해결책을 찾았습니다 : mixing-joined-and-single-table-inheritance. 질문에는 단일 두 테이블을 결합한 두 개의 상속 전략이 혼합 된 예제가 들어 있습니다. 그러나이 주석 매핑을 XML 매핑으로 변환 할 수 있습니까?XML을 사용하여 그러한 매핑을 수행 할 수 있습니까?

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@Table(name = "animals") 
public abstract class Animal { ... 

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type") 
public abstract class Mammal extends Animal { ... 

@Entity 
@Table(name = "mammals") 
@PrimaryKeyJoinColumn(name = "mammal_id") 
@DiscriminatorValue(value = "dog") 
public class Dog extends Mammal { ... 

@Entity 
@Table(name = "mammals") 
@PrimaryKeyJoinColumn(name = "mammal_id") 
@DiscriminatorValue(value = "cat") 
public class Cat extends Mammal { ... 

답변

1

어제 죄송합니다. 어제 나는 한 수준의 상속에서 개념적으로 발췌 한 코드를 게시했습니다. 이 발생하는 문제는 < 서브 클래스 > 및 < 공동 서브 클래스 > 아래에 넣을 수 없습니다

<discriminator column="type" type="string"/> 

에 의해 발생 중첩 될 수 없습니다. 나는 당신이 필요로 할지도 모른다 기능을 달성하기 위하여 오늘 유사한 부호를 달리하는 것을 시도한다. 나는 < >을 < 서브 클래스 > 아래에 합쳐서 조인트 서브 클래스 >을 시뮬레이트하려고 시도했지만, discriminator >은 이런 식으로 작동하지 않습니다.

제가 생각할 수있는 유일한 것은 동물과 포유 동물간에 일대일 관계를 만드는 것입니다. 내가 시도한 코드는 다음과 같습니다. 개념이 어색해 보일 수 있습니다.

 

+------------------------------+ 
|Tables      | 
+------------------------------+ 
|animal      | 
|mammal      | 
+------------------------------+ 

그리고 그 테이블의 스키마는이 도움이 될 것입니다

 
+------------------------------+ 
|animal      | 
+------------------------------+ 
|id       | 
|mammal_id      | 
+------------------------------+ 

+------------------------------+ 
|mammal      | 
+------------------------------+ 
|mammal_id      | 
|type       | 
+------------------------------+ 

희망 :

<hibernate-mapping> 
<class name="bean.Animal" table="animal"> 
    <id name="id" type="java.lang.Integer"> 
     <column name="id" length="50" scale="0" /> 
    </id> 
    <many-to-one name="mammal" 
    column="mammal_id" 
    not-null="true"/> 
</class> 

<class name="bean.Mammal" table="mammal"> 
    <id name="mammal_id" type="java.lang.Integer"> 
     <column name="mammal_id" length="50" scale="0" /> 
    </id> 
    <discriminator column="type" type="string"/> 

    <subclass name="bean.Dog" extends="bean.Mammal" discriminator-value="dog"> 
     </subclass> 
     <subclass name="bean.Cat" extends="bean.Mammal" discriminator-value="cat"> 
     </subclass> 
</class> 

는 그리고 결과 테이블입니다. BTW, 나는 아직도 당신이 해결책을 가지고 있기 때문에 주석을 사용하여 주석을 사용하지 않는 이유가 무엇인지 궁금합니다. :)

+0

비슷한 매핑을 실행 해 보셨습니까? ERROR ErrorLogger : 57 - XML ​​구문 분석 오류 (215) : 요소 유형 "joined-subclass"의 내용이 "(meta *, subselect?) ...와 일치해야합니다. –

관련 문제