2012-01-11 3 views
0

나는 여러 클래스 인 계층 적 JPA 매핑이 있습니다. 이 같은 것JPA 깊은 상속 주석 속성

@Entity 
@Inheritance(strategy= InheritanceType.SINGLE_TABLE) 
public abstract class BaseEntityClass implements Serializable { 

    // lots of stuff common to all my entities. 

} 

@Entity 
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) 
public abstract class EntityTypeOne extends BaseEntityClass { 
    // stuff common to EntityTypeOne 
} 

@Entity 
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) 
public abstract class EntityTypeTwo extends BaseEntityClass { 
    // stuff common to EntityTypeTwo 
} 

맵핑 전략을 정의하기 위해 수퍼 클래스와 함께 @Inheritence 메소드를 사용하는 것을 알고 있습니다. 그러나 이것이 깊은 계급 구조와 어떻게 작용합니까? 모든 리프 클래스를 자신의 테이블에 매핑하려고합니다. BaseEntityClass로 SINGLE_TABLE을 수행해야합니까?

답변

2

기본 클래스는 TABLE_PER_CLASS으로 표시되어야합니다. 여기에 OpenJPA에서 예제 :

는 엔티티 클래스 에 사용하는 상속 전략 정의 다음 JPA JavaDocs에 따르면

@Entity 
@Table(name="MAG") 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public class Magazine { 
    ... 
} 

@Entity 
@Table(name="TABLOID") 
public class Tabloid 
    extends Magazine { 
    ... 
} 

에서, @Inheritance 주석은 클래스 계층 구조의 루트를 지정해야합니다 계층. 엔터티 클래스에서 엔터티 클래스 계층 구조의 루트 인 것으로 지정됩니다.

이 주석을 서브 클래스에 배치 할 수 있고 그 동작이 정의되지 않은 경우 사양에 명시되지 않습니다. 당신은 @Inheritance(strategy = TABLE_PER_CLASS)으로 Base에 주석을 달 필요가

SubSub -> Sub -> Base 

:이 계층이있는 경우

그래서, 당신이 의견에 질문 한 질문에 대답합니다.

+0

계층 구조의 모든 수퍼 클래스가 동일한 @Inheritence 주석을 가져야하는 경우가 있습니까? 다른 주석을 사용한다는 것은 무슨 뜻입니까? – b3bop

+0

업데이트 된 답변을 참조하십시오. – Behrang

+0

굉장합니다. 감사 – b3bop