2010-11-17 7 views
11

Können Sie aus der JPA-Spezifikation ableiten, wenn @PrimaryKeyJoinColumn(...), die nicht einsetzbar und aktualisierbar Parameter hat, ist die gleiche wieJPA: ist @PrimaryKeyJoinColumn (...) das gleiche wie @JoinColumn (..., einfügbar =?, Aktualisierbar =?)?

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

oder

@JoinColumn (..., einsetzbar = true, updatable = true)

bei normalen (Nicht-Vererbungs) -Verbindungen? Sollten sie austauschbar sein? Was sind die einfügbaren und aktualisierbaren Eigenschaften? Sind sie überhaupt auf etwas eingestellt? Beachten Sie, ich bin Targeting nur das Schreibschutz-Attribut, dass beide (scheinbar) implementieren ...

Ich bin immer ziemlich inkonsistent Mapping Ausnahme mit Eclipse und Hibernate ...

Hier ist die @PrimaryKeyJoinColumn JavaEE 5 + 6 Javadoc:

PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)

Zitat:

... und es kann in einer OneToOne-Zuordnung verwendet werden, in der der Primärschlüssel der referenzierenden Entität als Fremdschlüssel für die referenzierte Entität verwendet wird.

+0

mehr sogar - wenn Blick auf thir Empfehlung für die Herstellung einer Eins-zu-Eins-Beziehung in verschiedenen Versionen der API - sieht so aus, als ob sie nicht mehr empfehlen '' PrimaryKeyJoinColumn' zum Erstellen von Relationen zu verwenden. [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

Antwort

13

Ja, die beiden sind gleichwertig.

Hinweis in JPA 2.0 können Sie auch eine @Id zu einer @OneToOne Zuordnung hinzufügen und vermeiden, das doppelte Basis-ID-Attribut insgesamt.

Siehe

von den WikiBooks Java Persistence Seiten

+0

Danke !: "Da Sie jetzt zwei Mappings für dieselbe Fremdschlüsselspalte haben, müssen Sie definieren, welche in die Datenbank geschrieben wird (es muss die Basic sein), also OneToOne oder ManyToOne-Fremdschlüssel muss als schreibgeschützt definiert sein. Dies wird durch Setzen der JoinColumn-Attribute insertable und updatable auf false oder durch Verwendung der @PrimaryKeyJoinColumn anstelle von @JoinColumn erreicht. " – Kawu

+0

Dies bedeutet, dass ich einen Fehlerbericht für EclipseLink einreichen muss, da der Austausch von @JoinColumn (..., insertable = false, aktualisierbar = false) mit @PrimaryKeyJoinColumn (...) MappingExceptions ... – Kawu

+0

den zweiten Link sein sollte : http://en.wikibooks.org/wiki/Java_Persistence/OneToOne#Target_Foreign_Keys.2C_Primary_Key_Join_Columns.2C_Cascade_Primary_Keys – Kawu