6
@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;
}

Above structure will give an exception:

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on    
Course references an unknown entity: Person

It says you cannot use Person in mappings because it is not a concrete Entity. How do I achieve such an inheritance scenario?

4

2 回答 2

4

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

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

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

于 2013-03-19T15:42:39.103 回答
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;
}
于 2016-06-15T05:12:38.520 回答