Hibernate Inheritance - reference to an object annotated with @MappedSuperclass

@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 the structure will give an exception:

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

It says that you cannot use Person in mappings because it is not a specific entity. How to achieve such an inheritance scenario?

+5
source share
2 answers

Simple, you change the annotation @MappedSuperclassto Personon@Entity

Use @MappedSuperclassonly where explicitly I do not want the class to be requested, or part of a relationship. @Entityeverywhere.

Good heuristics to decide if your superclass should abstract- if any - use @MappedSuperclassas you did onAbstractBaseModel

+4
source
@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;
}
0
source

All Articles