Maison >Java >javaDidacticiel >JoinColumn vs mappedBy dans JPA : quand utiliser quelle 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; ... }
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
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; }
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!