Criando mapeamento N-N com Hibernate e adicionando data de cadastro no relacionamento



Imagine a seguinte situação: Precisamos relacionar duas tabelas, clínica e médico, sendo que nesse relacionamento eu desejo guardar a data que o médico foi vinculado aquela clínica. No nosso exemplo vamos partir do ponto que já tenhamos o médico e a clinica devidamente mapeados e registros de ambos inseridos no banco.


Crie uma classe como exemplo abaixo:


@SuppressWarnings("serial")

@Embeddable

public class Clinica_MedicoPK implements Serializable{

@ManyToOne (fetch = FetchType.EAGER )

@JoinColumn (name= "cnpj_clinica" )

@OnDelete(action = OnDeleteAction.CASCADE)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

private Clinica clinica;

@ManyToOne (fetch = FetchType.EAGER )

@JoinColumn (name= "crm_medico" )

@OnDelete(action = OnDeleteAction.CASCADE)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

private Medico medico;

@Temporal(TemporalType.DATE)

private Date data_cadastro;


Temos então uma instancia da classe Clinica e uma da classe Medico como também uma instancia da classe Date que irá guardar a data de cadastro. Se você já notou temos a anotação @Embeddable, que indica que essa classe funciona com uma chave composta para uma tabela. Feito isso crie outra classe como o exemplo abaixo:


@Entity

@Table (name= "clinica_medico")

public class Clinica_Medico implements Serializable{

@EmbeddedId

private Clinica_MedicoPK clinica_MedicoPK;


public Clinica_MedicoPK getClinica_MedicoPK() {

return clinica_MedicoPK;

}


public void setClinica_MedicoPK(Clinica_MedicoPK clinica_MedicoPK) {

this.clinica_MedicoPK = clinica_MedicoPK;

}


}

Essa será nossa tabela com uma instancia de Clinica_MedicoPK que será chave composta da tabela clinica_medico.


Abaixo temos uma exemplo de como inserir:


//a clinica e o médico já inseridos no banco

Clinica clinica = repositorio.buscarClinica(id_clinica);

Medico medico = repositorio.buscarMedico(id_medico);


Clinica_MedicoPK clMedicoPK = new Clinica_MedicoPK();

//seto a clinica no pk

clMedicoPK.setClinica(clinica);

//seto o médico

clMedicoPK.setMedico(medico);

//seto a data de cadastro

clMedicoPK.setData_cadastro(new Date(System.currentTimeMillis()));

//instacio a classe que vai conter o pk

Clinica_Medico clinica_Medico = new Clinica_Medico();

//adiciono a pk com a clinica e o médico

clinica_Medico.setClinica_MedicoPK(clMedicoPK);


//insiro no banco o vínculo da clinica com o medico

repositorio.salvarClinicaMedico(clinica_Medico);

Category

Category

  • (1)
  • (1)
  • (1)
  • (1)
  • (1)
  • (1)

Category

Category