JPA: différence entre les annotations @JoinColumn et @PrimaryKeyJoinColumn?
Quelle est la différence exacte entre @JoinColumn
et @PrimaryKeyJoinColumn
?
Vous utilisez @JoinColumn
pour les colonnes qui font partie d'une clé étrangère. Typique de la colonne pourrait ressembler (par exemple, dans une table de jointure avec des attributs supplémentaires):
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
Ce qui se passe si je fais la promotion de la colonne à un/PK, trop (un.k.un. l'identification de la relation)? Comme la colonne est maintenant le PK, je dois tagger avec @Id
:
@Id
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
Maintenant, la question est:
Sont @Id
+ @JoinColumn
le même que juste @PrimaryKeyJoinColumn
?:
@ManyToOne
@PrimaryKeyJoinColumn(name = "...")
private OtherClass oc;
Si non, quelle est @PrimaryKeyJoinColumn
là pour?
InformationsquelleAutor Kawu | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Ce soutien renforcé de dérivés identificateurs est en fait partie de la nouveautés dans la JPA 2.0 (voir la section 2.4.1 Clés Primaires Correspondant aux Dérivés Identités dans la JPA 2.0), JPA 1.0 ne permet pas
Id
sur unOneToOne
ouManyToOne
. Avec JPA 1.0, vous devez utiliser lePrimaryKeyJoinColumn
et également définir unBasic
Id
cartographie de la colonne de clé étrangère.Vous pouvez obtenir un résultat similaire mais à l'aide d'un
Id
surOneToOne
ouManyToOne
est beaucoup plus simple et est la meilleure façon de carte dérivé identificateurs de JPA 2.0.PrimaryKeyJoinColumn
peut encore être utilisé dans un REJOINT stratégie de l'héritage. Ci-dessous la section pertinente de la JPA 2.0 spécification:Voir aussi
L'auteur est à l'aide d'une pré version JPA 2.0 version compatible avec EclipseLink (version 2.0.0-M7 à l'époque de l'article) à écrire un article sur JPA 1.0(!). Cet article est trompeur, l'auteur est à l'aide de quelque chose qui est PAS partie de JPA 1.0.
Pour l'enregistrement, le soutien de
Id
surOneToOne
etManyToOne
a été ajouté dans EclipseLink 1.1 (voir ce message de James Sutherland, EclipseLink comitter et principal contributeur de la Persistance Java wiki livre). Mais permettez-moi d'insister, c'est PAS partie de JPA 1.0.J'ai l'habitude de différencier ces deux via ce schéma:
Utilisation
PrimaryKeyJoinColumn
Utilisation
JoinColumn
JoinColumn
, la clé primaire de la table principale deviendra clé étrangère dans une autre table.