1
resposta

[Dúvida] Duvida Erro 1 do para saber mais

Na atividade 6(para saber mais) da aula 3, tem uma explicação de um erro comum em entidades bidirecionais, mas fiquei confuso sobre a solução dada.

No exemplo temos uma classe Aluno e uma classe Disciplina, na aluno a referencia é OneToMany e esta utilizando um "mappedBy" e na Disciplina a referencia é ManyToOne.

E na atividade temos o seguinte comentario: " Neste exemplo, a entidade "Disciplina" está mapeando para a entidade "Aluno". No entanto, a entidade "Aluno" também precisa mapear de volta para a "Disciplina". A falta desse mapeamento bidirecional é uma causa comum de erros.

Para resolver, inclua o mapeamento no lado "Aluno" da relação: "

A solução dada no exemplo é incluir esse método na classe Aluno:

    public void addDisciplina(Disciplina disciplina) {
        this.disciplinas.add(disciplina);
        disciplina.setAluno(this);
    }

E eu gostaria de saber o motivo da classe Aluno não esta mapeando a classe Disciplina, pois na classe Aluno possui o mappedBy. E qual a real necessidade do metodo, não entendi muito bem o que ele resolve. Seria o setAluno da disciplina recebida no método ?

1 resposta

Olá, Matheus!

Entendo que a questão dos mapeamentos bidirecionais pode ser um pouco confusa no começo, mas vamos esclarecer isso juntos.

A classe Aluno está sim mapeando a classe Disciplina através do atributo disciplinas que é uma lista de Disciplina e o mappedBy que indica que o mapeamento é feito pelo atributo aluno da classe Disciplina. Entretanto, o que está faltando aqui é uma maneira de adicionar uma Disciplina a um Aluno e ao mesmo tempo definir que o Aluno dessa Disciplina é o Aluno ao qual a Disciplina foi adicionada.

O método addDisciplina(Disciplina disciplina) na classe Aluno resolve exatamente isso. Quando você adiciona uma Disciplina a um Aluno através desse método, você está fazendo duas coisas:

  1. Adicionando a Disciplina à lista de disciplinas do Aluno.
  2. Definindo que o Aluno dessa Disciplina é o Aluno ao qual a Disciplina foi adicionada.

Vamos a um exemplo prático:

Aluno aluno = new Aluno();
Disciplina disciplina = new Disciplina();

aluno.addDisciplina(disciplina);

Nesse exemplo, quando chamamos aluno.addDisciplina(disciplina), estamos adicionando a disciplina à lista de disciplinas do aluno e também estamos definindo que o aluno dessa disciplina é o aluno ao qual a disciplina foi adicionada.

Espero ter ajudado e bons estudos!