@MappedSuperclass
public abstract class AbstractBaseModel{ }
@MappedSuperclass
public class Person extends AbstractBaseModel { }
@Entity
public class APerson extends Person { }
@Entity
public class BPerson extends Person { }
@Entity
public class Course extends AbstractBaseModel {
@ManyToOne
@JoinColumn(name ="person")
private Person person;
}
上述结构将给出例外情况:
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on
Course references an unknown entity: Person
它表示你不能在映射中使用Person,因为它不是一个具体的实体。我如何实现这种继承方案?
答案 0 :(得分:4)
很简单,您将@MappedSuperclass
上的Person
注释更改为@Entity
仅在您明确不希望该类可查询的情况或关系的一部分时使用@MappedSuperclass
。其他地方@Entity
。
一个好的启发式决定是看你的超类是abstract
- 如果是 - 使用@MappedSuperclass
,就像你在AbstractBaseModel
上所做的那样
答案 1 :(得分:0)
@Entity
@Table(name="PERSON")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator",discriminatorType=DiscriminatorType.STRING)
public absract class Person extends AbstractBaseModel { }
@Entity
public class APerson extends Person { }
@Entity
public class BPerson extends Person { }
@Entity
public class Course extends AbstractBaseModel {
@ManyToOne
@JoinColumn(name ="person", **insertable = false, updatable = false** )
private Person person;
}