Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Mapeamento de 3 entidades

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 ?

4 respostas

Boa tarde Marcos. Eu faria :

@ManyToOne
private Doctor doctor;
@ManyToOne
private Client client;

Pois os médicos e os pacientes podem estar em outras consultas.

Com relação as anotações. O @Entity é para a realmente virar uma entidade. Já anotação @Table é para configurar a tabela que será gerada, como por exemplo, o nome dela.

Você se refere a entidade MedicalConsultation ? Eu pensei assim:

  • Uma consulta tem um paciente e um doutor.

  • E um Paciente pode estar em várias consultas.

  • Bem como um doutor também pode estar em várias consultas.

Por isso que eu fiz a MedicalConsultation compor via @OneToOne.

solução!

Esse comportamento é o ManyToOne, pois o OneToOne seria se aquela consulta fosse daquele médico e o médico só atender aquela consulta

Muito obrigado pelo esclarecimento