Oi!
A cardinalidade vai depender das regras da aplicação.
Se na sua aplicação o médico pode ter apenas uma especialidade, então será um relacionamento manyToOne:
A tabela de especialidades tem o cadastro de todas as especialidades:
id | nome |
---|
8 | Ortopedia |
9 | Cardiologia |
10 | Oftalmologia |
E na tabela de médicos cada médico tem o id da especialidade que ele pertence:
id | nome | crm | status | especialidade_id |
---|
32 | Ana | 123456 | 1 | 10 |
33 | Pedro | 222333 | 1 | 8 |
34 | Rodrigo | 444555 | 0 | 9 |
35 | Raquel | 777888 | 1 | 8 |
Agora, se na aplicação um médico pode ter múltiplas especialidades, então será necessário uma terceira tabela para armazenar as especialidades de cada médico (pois não sabemos quantas especialidades podem ser, então não dá para saber quantas colunas seriam necessárias na tabela de medicos):
id | nome |
---|
8 | Ortopedia |
9 | Cardiologia |
10 | Oftalmologia |
id | nome | crm | status |
---|
32 | Ana | 123456 | 1 |
33 | Pedro | 222333 | 1 |
34 | Rodrigo | 444555 | 0 |
35 | Raquel | 777888 | 1 |
id_medico | id_especialidade |
---|
32 | 8 |
32 | 10 |
33 | 10 |
34 | 8 |
34 | 9 |
34 | 10 |
35 | 9 |
No primeiro caso o mapeamento JPA seria assim:
@Entity
@Table(name = "medicos")
public class Medico {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@ManyToOne
private Especialidade especialidade;
//outros atributos, metodos, etc.
}
@Entity
@Table(name = "especialidades")
public class Especialidade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
//outros atributos, metodos, etc.
}
Já no segundo caso, seria assim:
@Entity
@Table(name = "medicos")
public class Medico {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "especialidades_medicos",
joinColumns = @JoinColumn(name = "medico_id"),
inverseJoinColumns = @JoinColumn(name = "especialidade_id")
)
private List<Especialidade> especialidades = new ArrayList<>();
//outros atributos, metodos, etc.
}
@Entity
@Table(name = "especialidades")
public class Especialidade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@ManyToMany(mappedBy = "especialidades")
private List<Medico> medicos = new ArrayList<>();
//outros atributos, metodos, etc.
}