Maison > Java > javaDidacticiel > Quelle est la différence entre « @JoinColumn » et « @mappedBy » dans les relations JPA ?

Quelle est la différence entre « @JoinColumn » et « @mappedBy » dans les relations JPA ?

DDD
Libérer: 2024-12-28 00:07:09
original
724 Les gens l'ont consulté

What's the Difference Between `@JoinColumn` and `@mappedBy` in JPA Relationships?

Dévoilement de la distinction entre @JoinColumn et @mappedBy dans les relations JPA

Dans JPA, la gestion des relations entre entités est cruciale pour l'intégrité et la récupération des données . Deux annotations, @JoinColumn et @mappedBy, jouent des rôles distincts dans l'établissement de ces relations.

@JoinColumn : indication de la propriété et de la colonne de clé étrangère

L'annotation @JoinColumn marque une entité en tant que propriétaire d’une relation. Cela signifie que la table correspondante contiendra une colonne avec une référence de clé étrangère à la table référencée. Dans l'exemple fourni :

@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
@JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
private List<Branch> branches;
Copier après la connexion

L'entité Société est propriétaire de la relation avec son entité Branche. L'annotation @JoinColumn spécifie qu'une colonne nommée "companyIdRef" dans la table Branch contiendra la clé étrangère de la colonne "companyId" dans la table Company.

@mappedBy : indiquant la relation inverse et le propriétaire dans Entité opposée

D'autre part, l'attribut @mappedBy marque une entité comme l'inverse d'un relation. Le nom de l'attribut spécifié dans @mappedBy doit correspondre au nom de la propriété dans l'entité opposée qui représente la relation de son point de vue.

Dans l'exemple :

@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef")
private List<Branch> branches;
Copier après la connexion

L'attribut @mappedBy indique que l'entité Succursale est l'inverse de la relation par rapport à l'entité Société. Comme "companyIdRef" correspond au nom de la propriété dans l'entité Branch :

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "companyId")
private Company company;
Copier après la connexion

Conséquences de l'utilisation de l'annotation

  • @JoinColumn : l'entité annotée avec @JoinColumn est propriétaire de la relation, ce qui signifie qu'il contrôle la clé étrangère column.
  • @mappedBy : L'entité annotée avec @mappedBy est l'inverse de la relation, et le propriétaire est déclaré dans l'entité opposée. L'accès bidirectionnel est disponible via les deux entités.

Conclusion

Comprendre la différence entre @JoinColumn et @mappedBy est essentiel pour établir des relations correctes entre les entités JPA . En utilisant ces annotations de manière appropriée, les développeurs peuvent maintenir l'intégrité des données et naviguer de manière transparente dans des graphiques d'objets complexes.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal