Aula 08 - Relacionamentos entre Entidades 🔗
Sistemas reais têm dados conectados: um Pedido pertence a um Cliente, um Cliente tem vários Pedidos. Nesta aula, vamos modelar esses relacionamentos com JPA.
😊 Os Tipos de Relacionamento
| Anotação | Relação | Exemplo |
|---|---|---|
@OneToMany / @ManyToOne | Um para Muitos | Um Cliente tem muitos Pedidos |
@ManyToMany | Muitos para Muitos | Um Aluno está em muitos Cursos, e vice-versa |
@OneToOne | Um para Um | Um Usuário tem um Perfil |
📊 Modelando Cliente e Pedido
erDiagram
CLIENTE ||--o{ PEDIDO : possui
CLIENTE {
long id
string nome
}
PEDIDO {
long id
double valor
long cliente_id
} 🧠 Implementando @ManyToOne / @OneToMany
@Entity
public class Pedido {
@Id @GeneratedValue
private Long id;
private double valor;
@ManyToOne
@JoinColumn(name = "cliente_id")
private Cliente cliente;
}
@Entity
public class Cliente {
@Id @GeneratedValue
private Long id;
private String nome;
@OneToMany(mappedBy = "cliente")
private List<Pedido> pedidos;
}
Important
O lado @ManyToOne é o "dono" do relacionamento — é ele quem tem a coluna de chave estrangeira (cliente_id) no banco de dados.
🧠 Cuidado com Loops Infinitos (JSON)
Caution
Se Cliente retorna Pedidos, e cada Pedido retorna Cliente de novo, você cria um loop infinito ao converter para JSON! Veremos como resolver isso com DTOs na Aula 10.
📝 Exercícios Progressivos
- Básico: Qual anotação usamos no lado "muitos" de um relacionamento Um-para-Muitos?
- Básico: Dê um exemplo do mundo real de um relacionamento Muitos-para-Muitos.
- Intermediário: Qual entidade fica com a coluna de chave estrangeira em um relacionamento
@OneToMany/@ManyToOne? - Intermediário: Por que relacionamentos bidirecionais podem causar problemas ao serializar para JSON?
- Desafio: Modele o relacionamento entre
CursoeAluno(muitos para muitos) usando@ManyToMany.
🚀 Mini-projeto: Crie a entidade Cliente e relacione-a com Pedido usando @OneToMany/@ManyToOne. Salve um cliente com 2 pedidos e verifique no banco de dados.