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 전체 스택 트레이스를) 얻을? 여러 수준의 상속을 어떻게 매핑해야합니까?
도움 주셔서 감사합니다.
실제로 문제와 관련되어 있지만 동일한 클래스에서 @Entity 및 @MappedSuperclass를 갖는 것은 오류라고 말할 수 없습니다. – Affe