4
這裏是我的階級結構:問題與Hibernate映射2級繼承
class A
class B extends A
class C extends A
class D extends C
class E extends C
這裏是我的映射(略去了類機構):一個
類:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@MappedSuperclass
@DiscriminatorColumn(
name="className",
discriminatorType=DiscriminatorType.STRING
)
@ForceDiscriminator
public abstract class A
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
@DiscriminatorValue("E")
public class E extends C
我有一個F級包含一組A的:
@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>();
...
問題是,每當我添加一個新的E實例到一個集合然後調用session.saveOrUpdate(fInstance)
,休眠時用「A」作爲歧視字符串保存。當我嘗試訪問ASET的F情況下,我得到下面的異常(全堆棧跟蹤ommitted爲了簡潔):
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: path.to.class.A
我是否映射類錯誤?我該如何映射多個級別的繼承?
感謝您的幫助!
不能說它是否真的與你的問題有關,但是在同一個類中有@Entity和@MappedSuperclass是一個錯誤。 – Affe 2010-05-19 22:03:38