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;
}