Trouxe um exemplo mais complexo para debate.
Imaginem um software que precisa guardar o relacionamento de 3 entidades. E duas delas estão generalizadas a partir de uma outra entidade.
O cenário é: Um software de consulta médica. Onde temos a entidade do médico, do paciente (ambas generalizam uma pessoa) e a própria consulta.
Eu fiz da seguinte maneira:
@Entity
@Table (name= "person")
public abstract class Person {
@Id @GeneratedValue
protected Long id;
protected String name;
protected String email;
protected String password;
@OneToOne
protected Address address;
@Entity
@Table
public class Client extends Person{
@OneToMany(mappedBy = "client")
private List<MedicalConsultation> medicalConsultations;
@Entity
@Table
public class Doctor extends Person{
@OneToMany(mappedBy="doctor")
private List<MedicalConsultation> medicalConsultations;
@Entity
@Table(name="medical_consultation")
public class MedicalConsultation {
@Id @GeneratedValue
private Long id;
@OneToOne
private Doctor doctor;
@OneToOne
private Client client;
@JsonFormat(pattern="dd/MM/yyyy hh:mm")
private Date date;
Considerando a herança e as composições bidirecionais, vocês acham que isso está correto?
PS.: Qual a diferença entre @Table e @Entity ?