2010-11-17 50 views
11

Pouvez-vous dériver de la spécification JPA, si @PrimaryKeyJoinColumn(...), qui n'a pas insérables et paramètres actualisables, est le même queJPA: @PrimaryKeyJoinColumn (...) est-il identique à @JoinColumn (..., insérable =?, Updatable =?)?

@JoinColumn(..., insertable = false, updatable = false) 

ou

@JoinColumn (..., insérable = true, updatable = true)

lorsqu'il est utilisé sur des associations régulières (non héritées)? Devraient-ils être interchangeables? A quoi correspondent les propriétés insérables et modifiables? Sont-ils fixés à quelque chose? Remarque, je ne le ciblage de l'attribut de lecture seule que les deux (semblent) mettre en œuvre ...

Je reçois exception de la cartographie plutôt incompatible avec EclipseLink et Hibernate ...

Voici le @PrimaryKeyJoinColumn JavaEE 5 + 6 Javadoc:

PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)

Quote:

... et il peut être utilisé dans un mappage OneToOne dans lequel la clé primaire de l'entité référençant est utilisée comme clé étrangère de l'entité référencée.

+0

encore plus - si regard sur recommandation thir pour faire un à une relation dans les versions différentes de l'API - il semble qu'ils ne recommandent pas d'utiliser '@ PrimaryKeyJoinColumn' pour la création de relations. [java5] (http://docs.oracle.com/javaee/5/api/javax/persistence/OneToOne.html) vs [java6] (http://docs.oracle.com/javaee/6/api /javax/persistence/OneToOne.html) – msangel

Répondre

13

Oui, les deux sont équivalents.

Remarque dans JPA 2.0, vous pouvez également ajouter un @Id à un mappage @OneToOne et éviter d'avoir l'attribut id de base en double.

Voir

des WikiBooks Java Persistence pages

+0

Merci !: "Parce que vous avez maintenant deux mappages pour la même colonne de clé étrangère, vous devez définir celle qui sera écrite dans la base de données (elle doit être celle de base), donc OneToOne ou La clé étrangère ManyToOne doit être définie pour être en lecture seule, ce qui est fait en définissant les attributs JoinColumn insérables et modifiables sur false ou en utilisant @PrimaryKeyJoinColumn au lieu de @JoinColumn. " – Kawu

+0

Cela signifie que je vais devoir déposer un rapport de bogue pour EclipseLink, car l'échange de @JoinColumn (..., insertable = false, updatable = false) avec @PrimaryKeyJoinColumn (...) jette MappingExceptions ... – Kawu

+0

le deuxième lien devrait être : http://en.wikibooks.org/wiki/Java_Persistence/OneToOne#Target_Foreign_Keys.2C_Primary_Key_Join_Columns.2C_Cascade_Primary_Keys – Kawu