문제

2010-05-19 2 views
4

여기 내 클래스 구조입니다 :문제

클래스 A :

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@MappedSuperclass 
@DiscriminatorColumn(
     name="className", 
     discriminatorType=DiscriminatorType.STRING 
) 
@ForceDiscriminator 
public abstract class A 

class A 
class B extends A 
class C extends A 
class D extends C 
class E extends C 

그리고 여기 내 매핑 (간결함을 위해 생략 클래스 기관)입니다

클래스 B :

@Entity 
@DiscriminatorValue("B") 
public class B extends A 

클래스 C :

@Entity 
@DiscriminatorValue("C") 
@MappedSuperclass 
@DiscriminatorColumn(
     name="cType", 
     discriminatorType=DiscriminatorType.STRING 
) 
@ForceDiscriminator 
public abstract class C extends A 

클래스 D :

@Entity 
@DiscriminatorValue("D") 
public class D extends C 

클래스 E :

@Entity 
public class F 
{ 
    ... 

    @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL) 
    @JoinTable(
      name="F_A", 
      joinColumns = @JoinColumn(name="A_ID"), 
      inverseJoinColumns = @JoinColumn(name="F_ID") 
    ) 
    private Set<A> aSet = new HashSet<A>(); 

    ... 
: 나는 세트를 포함하는 클래스 F있어

@Entity 
@DiscriminatorValue("E") 
public class E extends C 

문제는 새 E 인스턴스를 aSet에 추가 할 때마다 session.saveOrUpdate(fInstance)으로 전화를 걸어, 최대 절전 모드에서 "A"를 차별 문자열로 저장하십시오.

org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: path.to.class.A 

내가 잘못 클래스를 매핑 있습니까 : 나는 F 인스턴스에 설정 A에 액세스하려고하면, 다음과 같은 예외 (간결 ommitted 전체 스택 트레이스를) 얻을? 여러 수준의 상속을 어떻게 매핑해야합니까?

도움 주셔서 감사합니다.

+1

실제로 문제와 관련되어 있지만 동일한 클래스에서 @Entity 및 @MappedSuperclass를 갖는 것은 오류라고 말할 수 없습니다. – Affe

답변

3

해결책을 찾았습니다. 다른 사람이이 문제를 해결할 수 있도록 여기에 게시 해 드리겠습니다.

C 클래스의 추가 주석이 문제를 일으키는 것으로 나타났습니다. 엔티티가 아닌 모든 것을 제거하고 다른 모든 클래스를 (적절한 식별자 값을 사용하여) 그대로 유지하면 모든 것이 올바르게 수행됩니다.

@Entity 
public class C extends A 
...