Maison  >  Article  >  Java  >  Quel est le rôle de « mappedBy » dans JPA et Hibernate pour gérer les relations bidirectionnelles ?

Quel est le rôle de « mappedBy » dans JPA et Hibernate pour gérer les relations bidirectionnelles ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 04:45:02425parcourir

What is the role of `mappedBy` in JPA and Hibernate for managing bi-directional relationships?

Comprendre mappedBy dans JPA et Hibernate

Dans Java Persistence API (JPA) et Hibernate, mappedBy est une annotation cruciale qui facilite la gestion de relations bidirectionnelles entre entités. Il répond à deux objectifs principaux :

1. Indiquer le côté inverse d'une relation :

mappedBy identifie l'entité qui n'est pas propriétaire de la relation. Il spécifie quelle propriété de cette entité doit être utilisée pour accéder à l'attribut associé. Ceci est particulièrement utile dans les relations bidirectionnelles où les deux entités se référencent mutuellement.

2. Élimination des contraintes de clé étrangère :

Contrairement à l'approche traditionnelle de création de relations de clé étrangère, mappedBy vous permet de définir la relation sans ajouter physiquement de colonne de clé étrangère. Au lieu de cela, il exploite l'existence d'une clé étrangère existante sur l'autre entité.

Utilisation de mappedBy dans des relations bidirectionnelles :

Pour illustrer l'utilisation de mappedBy, considérez l'exemple fourni :

Airline.java :

<code class="java">@Entity
@Table(name="Airline")
public class Airline {
    // ... Other fields ...
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "IDAIRLINE")
    private Set<AirlineFlight> airlineFlights;
}</code>

AirlineFlight.java :

<code class="java">@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
    // ... Other fields ...
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDAIRLINE")
    private Airline airline;
}</code>

Dans cet exemple, La compagnie aérienne est l'entité propriétaire, car elle possède la collection AirlinesFlights. La relation entre Airline et AirlineFlight se fait via la propriété aérienneFlights.

Du côté d'AirlineFlight, la propriété de la compagnie aérienne est annotée avec @ManyToOne et mappedBy = "airlineFlights". Ceci spécifie qu'AirlineFlight est le côté non propriétaire de la relation et que la propriété de la compagnie aérienne est mappée par la propriété aérienneFlights dans Airline.

Dans le schéma de base de données fourni, AirlineFlights a la colonne IDAIRLINE comme clé étrangère de la compagnie aérienne. . Par conséquent, Airline est bien le propriétaire de l'entité AirlinesFlights.

En utilisant mappedBy, vous établissez une relation bidirectionnelle sans ajouter de colonne de clé étrangère supplémentaire à AirlineFlight. Au lieu de cela, JPA et Hibernate lieront automatiquement les entités en fonction des mappages de propriétés spécifiés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn