Ficou muito confuso a explicação de Para saber mais: relacionamentos Uni e Bidirecionais com JPA.
Ficou muito confuso a explicação de Para saber mais: relacionamentos Uni e Bidirecionais com JPA.
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!
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.