Maison > Java > javaDidacticiel > JoinColumn vs mappedBy dans JPA : quand utiliser quelle annotation ?

JoinColumn vs mappedBy dans JPA : quand utiliser quelle annotation ?

DDD
Libérer: 2024-12-21 19:11:11
original
692 Les gens l'ont consulté

JoinColumn vs. mappedBy in JPA: When to Use Which Annotation?

Comprendre la distinction entre JoinColumn et mappedBy dans JPA

Dans l'API Java Persistence (JPA), la gestion des relations entre les entités est cruciale. Parmi les annotations clés pour établir des relations figurent @JoinColumn et @mappedBy.

Lors de l'utilisation des annotations @OneToMany pour les relations bidirectionnelles, il faut faire la différence entre le côté propriétaire et le côté inverse de la relation. L'utilisation de @JoinColumn du côté propriétaire indique que la table référencée possède une colonne de clé étrangère vers la table correspondante. En revanche, @mappedBy signifie le côté inverse, ce qui implique que l'autre entité agit en tant que propriétaire de la relation et possède une colonne mappée référençant l'entité à l'aide de @mappedBy.

Exemple de code

Considérez les exemples de code suivants :

@Entity
public class Company {

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

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

Dans le premier exemple, Company est le Le côté propriétaire et les succursales sont référencés via la colonne de clé étrangère companyIdRef. Dans le deuxième exemple, Company est le côté inverse de la relation et les branches sont référencées via la colonne mappée companyIdRef.

Utilisation correcte de l'annotation

Pour le code fourni dans le question, les annotations correctes doivent être :

@Entity
public class Company {
    @OneToMany(mappedBy = "company",
               orphanRemoval = true,
               fetch = FetchType.LAZY,
               cascade = CascadeType.ALL)
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}
Copier après la connexion

En utilisant ces annotations, une relation bidirectionnelle est établie entre l'entreprise et Branche, avec Société comme côté inverse et Branche comme côté propriétaire.

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