2017-10-16 8 views
0

데이터베이스 관리자를 위해 Join Inheritance Strategy를 사용해야했기 때문에 Single.Table을 사용하는 것이 더 쉬웠지만 엔티티라고합시다.결합 된 상속 전략을 사용하는 동안 Discriminator를 강제로 수행 할 수 있습니까?

@Entity 
    @Inheritance(strategy = InheritanceType.JOINED) 
    public abstract class Post{ 
      @Id 
      @GeneratedValue(strategy = GenerationType.IDENTITY) 
      protected Long id; 
      protected String title; 
      protected String d_type;// I want this to to be the discriminator. 
} 

그리고 아이 :

@Entity 
    public abstract class Book{ 
      protected String title; 
} 

예는 좋은 답변을 위해서 간단하지만 실제로 내가 그 각각의 특정 속성과 메소드를 가지고 5 "어린이"를 처리하고 단 하나만 제외하면 아무 것도 추가하지 않는 CommonPost이라고합니다. 부모가 이미 제공 한 것, 즉 {xPost, yPost, .., CommonPost}와 같이 열거 형을 가진 식별자를 추가하려는 이유입니다. 우선 가능하거나 심지어 실용적인가요? 더 나은 옵션이 아니라면 실용적 일 것입니다.

답변

0

JPA 공급 업체에 문의 할 수는 있지만 가능하면이를 확인할 수 있습니다. 나는 Hibernate가 이것을 지원한다고 믿는다.

이 다음은 샘플입니다 : 그들은 혼합 상속 전략 호출

@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="POST_TYPE") 
public abstract class Post{ 

기술적으로, 그것은 조인 전략이다하지만 아무것도 (일반적으로 단일 테이블 전략 사용)을 판별 자 컬럼을 추가하지 못하도록합니다.

또 다른 제안 : 엔티티 CommonPost에 특정 속성이나 메서드가 없다고 말하면 왜 상속 계층에서 최상위 클래스가되지 않습니까? 이제 추상 클래스 Post을 제거 할 수 있습니다. 여기

는 당신이 그것을 할 수 있습니다 방법은 다음과 같습니다

@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="POST_TYPE") 
@DiscriminatorValue("C") 
public class CommonPost { 
... 
@DiscriminatorValue("X") 
public class XPost extends CommonPost { 
... 
@DiscriminatorValue("Y") 
public class YPost extends CommonPost {