@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;
}
Sopra struttura darà un'eccezione:Hibernate Inheritance - Riferimento a un'entità annotato con @MappedSuperclass
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on
Course references an unknown entity: Person
Si dice che non è possibile utilizzare persona nelle mappature perché non è un'entità concreta. Come ottengo uno scenario di ereditarietà del genere?
In tal caso, Hibernate crea solo classe Persona. Non ha creato APerson o BPerson. L'entità persona ha unito APerson e BPerson. – user706071
@ user706071 - Non sono sicuro di cosa intendi. Hibernate non genera classi. In che modo APerson e BPerson sono diversi da Person? Può essere che non abbiano attributi aggiuntivi e le differenze siano solo comportamentali? – kostja
Le classi di APerson e di BPerson hanno i propri attributi diversi da quelli comuni (Persona). Comunque, grazie per la risposta. Userò l'approccio che suggerisci. Hibernate ha creato una tabella denominata Persona che unisce tutti gli attributi di APerson e BPerson e ha aggiunto un attributo DTYPE per distinguere il tipo di sottoclasse. Poiché il mio APerson e il BPerson non sono molto diversi, questo tipo di eredità è applicabile a me. – user706071