"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como `MappedBy` facilita relacionamentos bidirecionais em JPA e Hibernate?

Como `MappedBy` facilita relacionamentos bidirecionais em JPA e Hibernate?

Publicado em 17/11/2024
Navegar:385

How Does `MappedBy` Facilitate Bidirectional Relationships in JPA and Hibernate?

Compreendendo MappedBy em JPA e Hibernate

Em estruturas de mapeamento objeto-relacional (ORM) como JPA e Hibernate, MappedBy é uma anotação útil para estabelecer relacionamentos bidirecionais entre classes de entidade. Esta anotação é usada no contexto de relacionamentos um para muitos e muitos para um.

Uso recomendado

O uso recomendado de MappedBy é o seguinte:

  • Relacionamentos um-para-muitos: Em um relacionamento um-para-muitos, o lado "muitos" do relacionamento (o lado com uma coleção) deve ter o MappedBy anotação. Esta anotação especifica o nome do campo no lado "um" do relacionamento que contém a restrição de chave estrangeira.
  • Relacionamentos muitos para um: Em um relacionamento muitos para um relacionamento, o lado "um" do relacionamento (o lado com um único objeto de referência) deverá ter a anotação MappedBy. Esta anotação especifica o nome do campo no lado "muitos" do relacionamento que contém a restrição de chave estrangeira.

Finalidade de MappedBy

MappedBy serve vários propósitos:

  • Traversal bidirecional: Em relacionamentos bidirecionais, MappedBy permite que você atravesse o relacionamento em ambas as direções sem a necessidade de definições explícitas de chave estrangeira em ambas as tabelas.
  • Otimização: Ao especificar a propriedade do relacionamento, MappedBy pode otimizar o desempenho do banco de dados, evitando tabelas de junção desnecessárias ou restrições de chave estrangeira.

Exemplo

No exemplo fornecido, Airline possuindo muitos AirlineFlights e AirlineFlights pertencentes a uma companhia aérea, MappedBy deve ser usado na classe AirlineFlight da seguinte forma:

@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
    // ... other attributes ...

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="IDAIRLINE", nullable=false)
    @MapsId
    private Airline airline;
    // ... other attributes ...
}

Neste exemplo, a anotação @MapsId indica que o campo IDAIRLINE em AirlineFlight é usado como restrição de chave estrangeira para a entidade Airline. Usando MappedBy aqui, você pode estabelecer um relacionamento bidirecional entre Airline e AirlineFlight sem a necessidade de restrições de chave estrangeira em ambas as tabelas.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3