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

Não entendi direito sobre o lado forte do relacionamento

Olá, estou com uma dúvida, há muito tempo que não mexo com banco de dados e em uma das aulas ouvi sobre o lado forte e fraco de um relacionamento bidirecional:

1º - Como posso identificar quem é qual e qual a diferença entre eles?

2º - No momento da anotação de cardinalidade, no exemplo:

@Entity
public class Aluno {

    @OneToOne
    private Perfil perfil;
}
@Entity
public class Perfil {

    @OneToOne
    private Aluno aluno;
}

Em qual devo inserir o mappedBy ?

Obrigado a quem puder me ajudar com essa dúvida!

2 respostas
solução!

O lado forte/dominante é o lado que ira ter a chave estrangeira do outro no banco de dados.

Em relacionamentos OneToOne, qualquer um dos lados pode ser o dominante.

Em relacionamentos ManyToOne/ OneToMany o lado dominante é sempre o do Many

Em relacionamentos ManyToMany, qualquer um dos lados pode ser dominante , porém ira existir uma nova tabela que liga a chave primaria de uma classe com a outra, portanto nenhuma das duas classes tera a chave estrangeira da outra.

O mappedBy você deve colocar sempre na classe que NÃO é dona do relacionamento (lado fraco), para indicar que aquele atributo é da classe do lado inverso do relacionamento(lado fraco). Ou seja, se Pessoa é a classe dominante, você deve colocar o atributo na classe Perfil.

@Entity
public class Perfil {
    @OneToOne(mappedby="perfil")  // Perfil é o lado inverso do relacionamento, e Aluno o  lado dominante.
    private Aluno aluno;
}

Como seu exemplo é um relacionamento OneToOne você pode escolher qualquer um dos dois para ser a classe dominante. E o lado que você escolher para ser classe dominante ira conter a chave estrangeira da outra classe.

Oi Bruno, muito boa explicação, obrigado lembrei e sanei minha dúvida perfeitamente!