Hibernate继承 - 引用使用@MappedSuperclass注释的实体

use*_*071 5 inheritance hibernate

@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;
}
Run Code Online (Sandbox Code Playgroud)

以上结构将给出一个例外:

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on    
Course references an unknown entity: Person
Run Code Online (Sandbox Code Playgroud)

它表示你不能在映射中使用Person,因为它不是一个具体的实体.我如何实现这样的继承方案?

kos*_*tja 4

很简单,您将@MappedSuperclass注释更改Person@Entity

@MappedSuperclass仅在您明确不希望类可查询或属于关系的一部分时使用。@Entity其他地方。

一个很好的启发式决定是看看您的超类是否abstract(如果是)使用@MappedSuperclass,就像您在AbstractBaseModel