3
respostas

Não entendi a explicação

Ficou muito confuso a explicação de Para saber mais: relacionamentos Uni e Bidirecionais com JPA.

3 respostas

Olá, Sergio! Tudo bem?

A explicação sobre relacionamentos Uni e Bidirecionais com JPA possa ter parecido um pouco complexa. Vou tentar descomplicar um pouco.

Os relacionamentos unidirecionais e bidirecionais são conceitos usados quando estamos trabalhando com banco de dados.

Um relacionamento unidirecional é quando uma entidade tem conhecimento de outra, mas essa outra não tem conhecimento da primeira. Já um relacionamento bidirecional é quando ambas as entidades têm conhecimento uma da outra.

Vou usar um exemplo prático para explicar melhor. Imagine que temos um blog, onde temos posts e comentários. Cada post pode ter vários comentários. Aqui temos um relacionamento bidirecional, pois o post sabe quais são seus comentários e cada comentário sabe a qual post ele pertence. Em código, ficaria assim:

@Entity
public class Post {
    @Id
    @GeneratedValue
    private Long id;
    private String title;
    private String content;

    @OneToMany(mappedBy = "post")
    private List<Comment> comments = new ArrayList<>();
}

@Entity
public class Comment {
    @Id
    @GeneratedValue
    private Long id;
    private String content;

    @ManyToOne
    @JoinColumn(name = "post_id")
    private Post post;
}

Aqui, @OneToMany(mappedBy = "post") na classe Post significa que um Post pode ter muitos comentários. E @ManyToOne na classe Comment significa que um comentário pertence a um post. O mappedBy = "post" no Post se refere ao campo post na classe Comment.

Agora, existem alguns erros comuns ao configurar esses mapeamentos, e a aula menciona dois deles.

O primeiro é quando você tem uma relação bidirecional, mas esquece de mapear ambos os lados da relação. Por exemplo, um aluno pode se matricular em várias disciplinas e uma disciplina pode ter vários alunos. Se você mapear apenas um lado da relação, isso pode causar erros. Para resolver, você precisa incluir o mapeamento no outro lado da relação.

O segundo erro é quando você falha ao escolher o lado de posse corretamente em uma associação bidirecional. Em uma associação bidirecional, um lado é o proprietário, e o outro é o lado invertido. Na JPA, o lado do proprietário é sempre usado quando se atualiza a relação no banco de dados. Se você esquecer de atualizar o lado do proprietário, a JPA não poderá sincronizar corretamente a associação com o banco de dados.

Lembre-se, a chave para entender esses conceitos é a prática. Então, continue praticando e testando seu código.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Ei Sérgio!

Obrigada pelo feedback! Pra podermos trabalhar no conteúdo, gostaria de saber quais foram seus principais pontos de dúvida, a fim de acrescentar os tópicos na atividade.

Fico no aguardo!

PS: Obrigada pela explicação, Armano!

Obrigado Armano!

Iasmin, sobre a associação bidirecional eu entendi bem.

Não entendi as nomenclaturas sobre o que é o lado PROPRIETÁRIO e o lado INVERTIDO.

Não entendi também a explicação da relação Many-to-many e porque precisa de uma tabela intermediária para sua implementação.