Relacional
OneToMany
Explorando a relação entre classes e entidades
Explicação
A anotação @OneToMany
do JPA é usada para definir um relacionamento de um para muitos entre duas entidades. Esse tipo de relacionamento implica que uma instância de uma entidade (o "lado um") pode estar associada a várias instâncias de outra entidade (o "lado muitos").
@OneToMany
Funcionamento:
- Quando a anotação
@OneToMany
é aplicada a um atributo de uma entidade, ela indica que esse atributo representa uma coleção de entidades relacionadas. - A coleção geralmente é uma lista, conjunto ou outra estrutura de dados que armazena várias instâncias da entidade associada.
- No banco de dados, a relação é mapeada com uma chave estrangeira na tabela da entidade do "lado muitos", que faz referência à chave primária da entidade do "lado um".
Aspectos importantes:
- Lado "um" e lado "muitos": O lado "um" é o lado onde a anotação
@OneToMany
é aplicada, e o lado "muitos" é onde a chave estrangeira está armazenada. - Bidirecionalidade: O relacionamento pode ser bidirecional, ou seja, você pode ter um mapeamento no lado "muitos" com a anotação
@ManyToOne
, indicando que várias instâncias de uma entidade estão associadas a uma única instância da outra. - Cascata: Quando a relação é bidirecional, você pode configurar a anotação
@OneToMany
para realizar operações de cascata (como persistir ou excluir) nos elementos da coleção automaticamente, ao realizar operações na entidade do lado "um".
Parâmetros comuns:
- mappedBy: Este atributo é usado no lado "um" para especificar o nome do campo na entidade do lado "muitos" que é responsável pelo relacionamento. Esse parâmetro indica que a relação é mapeada pelo outro lado.
- cascade: Define as operações de cascata a serem aplicadas no relacionamento, como persistir, atualizar ou excluir as entidades associadas quando a entidade principal for manipulada.
Em resumo, a anotação @OneToMany
é usada para definir um relacionamento de "um para muitos" entre duas entidades, sendo importante para mapear e gerenciar a relação entre elas, além de garantir que as operações de persistência sejam realizadas de maneira eficiente e adequada.
O uso da anotação
mappedBy
no JPA pode gerar um risco de autoacoplamento entre as entidades, especialmente quando o relacionamento entre elas é complexo ou mal projetado. O conceito de autoacoplamento se refere à dependência excessiva entre duas entidades que podem ser difíceis de manter, evoluir ou testar devido à forte ligação entre elas.Exemplo
import jakarta.persistence.*;
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
// Atributo que vai armazenar a lista de endereços do cliente
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "cliente_id") // Define a chave estrangeira diretamente na tabela 'Endereco'
private List<Endereco> enderecos;
}