Maison >Java >javaDidacticiel >Comment « MappedBy » facilite-t-il les relations bidirectionnelles dans JPA et Hibernate ?

Comment « MappedBy » facilite-t-il les relations bidirectionnelles dans JPA et Hibernate ?

DDD
DDDoriginal
2024-11-01 21:45:02966parcourir

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

Comprendre MappedBy dans JPA et Hibernate

Dans les frameworks de mappage objet-relationnel (ORM) comme JPA et Hibernate, MappedBy est une annotation utile pour établir des relations bidirectionnelles entre les classes d'entités. Cette annotation est utilisée dans le contexte de relations un-à-plusieurs et plusieurs-à-un.

Utilisation recommandée

L'utilisation recommandée de MappedBy est la suivante :

  • Relations un-à-plusieurs : Dans une relation un-à-plusieurs, le côté « plusieurs » de la relation (le côté avec une collection) doit avoir le MappedBy annotation. Cette annotation spécifie le nom du champ du côté « un » de la relation qui contient la contrainte de clé étrangère.
  • Relations plusieurs-à-un : Dans un type plusieurs-à-un relation, le côté "un" de la relation (le côté avec un seul objet de référence) doit avoir l'annotation MappedBy. Cette annotation spécifie le nom du champ du côté « plusieurs » de la relation qui contient la contrainte de clé étrangère.

Objectif de MappedBy

MappedBy sert plusieurs objectifs :

  • Traversée bidirectionnelle : Dans les relations bidirectionnelles, MappedBy vous permet de parcourir la relation dans les deux sens sans avoir besoin de définitions de clés étrangères explicites dans les deux tables.
  • Optimisation : En spécifiant la propriété de la relation, MappedBy peut optimiser les performances de la base de données en évitant les tables de jointure inutiles ou les contraintes de clé étrangère.

Exemple

Dans votre exemple fourni, une compagnie aérienne possédant plusieurs AirlineFlights et AirlineFlights appartenant à une seule compagnie aérienne, MappedBy doit être utilisé dans la classe AirlineFlight comme suit :

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

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

Dans cet exemple, le @ L'annotation MapsId indique que le champ IDAIRLINE dans AirlineFlight est utilisé comme contrainte de clé étrangère pour l'entité Airline. En utilisant MappedBy ici, vous pouvez établir une relation bidirectionnelle entre Airline et AirlineFlight sans avoir besoin de contraintes de clé étrangère dans les deux tables.

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