2014-02-19 3 views
1

JPA로 모델을 빌드하려고하는데 문제가 발생하여 쉬운 해결책을 찾을 수 없습니다. 좋아, 그럼 내 데이터베이스 영화, TV 시리즈 및 TV 에피소드에 저장한다고 가정 해 봅시다. 세 가지 유형을 저장하는 하나의 테이블이 있습니다. 지금은 그 세 가지 유형으로 하나의 discriminator 열이 있습니다. 자바에서 하나의 추상 클래스와 영화, TVSerie 및 TVEpisode 그 클래스를 확장 할 수 있습니다.JPA에서 다중 레벨 상속

예를 들어 검색 요청과 같이 TV 요소 (TVSerie 및 TVEpisode)를 한 번에 검색하고 싶습니다. 나는이 같은 TVElement 클래스에 두 번째 판별 자 컬럼을 사용하는 방법에 대한 생각했습니다

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="type") 
public abstract class Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("tv") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="subtype") 
public class TVElement extends Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("episode") 
public class TVEpisode extends TVElement{ 
    ... 
} 

그러나이 솔루션이 작동하지 않습니다.

jpa에서 2 단계 상속을 얻는 가장 좋은 방법은 무엇입니까?

감사

답변

0

당신은 분명히 서브 클래스의 두 번째 @DiscriminatorColumn 필요하지 않습니다.

TVElement 추상 아니므로, HQL에서이 같은 일이 그것뿐만 아니라 하위 유형을 인출해야

from TVElement tvElement where ... 

잘해야한다. 수업은 다음과 비슷할 것입니다 :

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="type") 
@Polymorphism(type = PolymorphismType.IMPLICIT) 
@MappedSuperClass 
public abstract class Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("tv") 
public class TVElement extends Element{ 
    ... 
} 


@Entity 
@DiscriminatorValue("episode") 
public class TVEpisode extends TVElement{ 
    ... 
} 
+0

글쎄, 저는 discriminator 컬럼이 없다면 서브 타입을 어떻게 찾을 수 있는지 보지 못합니다. "TVElement TVElement ..."요청은 TVElements 만 제공합니다. 부모 클래스에서 @DiscriminatorColumn (name = "subtype")을 제거하면 @DiscriminatorValue ("episode") 행도 무의미합니다. – streem

+0

JPA 제공 업체는 무엇입니까? – WeMakeSoftware

+0

HibernatePersistence – streem