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