Quand dois-je utiliser @JoinColumn ou @JoinTable avec JPA?
@JoinColumn
donne Entity
une clé étrangère vers une autre Entity
alors que @JoinTable
liste de la relation entre toutes les relations entre Entity
et Entity
B. pour autant que je puisse dire, ils semblent tous les deux faire des choses semblables. Quand devrais-je utiliser l'un ou l'autre?
2 réponses
disons que vous avez une entité A
qui a un @ManyToOne
association d'une entite B
@JoinColumn définira la table cible clé étrangère(E. g B_ID
) en utilisant la table entité cible (par exemple B
).
@Entity
public class A {
private Long id;
@ManyToOne
@JoinColumn(name="B_ID")
private B b;
}
@JoinTable utilisera une table séparée pour maintenir la relation entre A
et B
.
@Entity
public class A {
private Long id;
@ManyToOne
@JoinTable(
name = "A_B",
joinColumns = @JoinColumn(name = "B_ID"),
inverseJoinColumns = @JoinColumn(name = "A_ID")
)
private B b;
}
cette fois ni l'un ni l'autre A
ni B
contiennent une clé étrangère, parce qu'il y a une table séparée (par exemple A_B
) pour maintenir l'association entre A
et B
.
@JoinTable stocke l'id des deux tables dans une table séparée tandis que @JoinColumn stocke l'id d'une autre table dans une nouvelle colonne.
@JoinTable: c'est le type par défaut. Utilisez ceci lorsque vous avez besoin d'une base de données plus normalisée. IE. pour réduire la redondance.
@JoinColumn : utilisez ceci pour de meilleures performances car il n'a pas besoin de rejoindre une table supplémentaire.