2011-09-23 5 views
1

를 포착하지 나는 다음과 같은 계층 구조가 있습니다최대 절전 모드 @DiscriminatorValue는

@Entity 
@Table("changes") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) 
class Change { 
    @Column(name="type", nullable=false, insertable=false, updatable=false) 
    @GeneratedValue 
    String _type; 

    @ManyToOne 
    @JoinColumn(name = "user_id") 
    User _user; 
} 

@Entity 
class EmailChange extends Change {} 

@Entity 
class BillingChange extends Change {} 

@Entity 
class User { 
    @OneToMany(mappedBy = "_user", cascade = Array(Cascade.ALL)) 
    List<EmailChange> _emailChanges; 

    @OneToMany(mappedBy = "_user", cascade = Array(Cascade.ALL)) 
    List<BillingChange> _billingChanges; 
} 

내가 _emailChanges 만 행을 포함하는 기대를 어디 유형 = "BillingChange"과 유형 = "EmailChange"및 _billingChanges 행. 그러나 이것은 실제로 일어나는 것이 아닙니다. 둘 다 결국 두 유형의 행을 포함하게됩니다. 다형성 관계에 따르도록 강제 할 방법이 있습니까?

답변

0

SINGLE_TABLE로 매핑 했으므로 모든 열이 단일 테이블로 이동합니다. OneToMany는 해당 테이블에 대해 외래 키를 만듭니다. 같은 테이블은 다른 열을 가질 수 없습니다.

+0

테이블의 열은 정확히 동일합니다. 그러나, 나는이 foreign 키가 요청 된 객체의 유형을 계속 따르도록 기대합니다. 즉, type = "emailChange"또는 type = "billingChange"로 제한하는 것이고 이것은 발생하지 않는 것 같습니다. –