2010-11-17 11 views
11

można czerpać ze specyfikacji JPA, jeśli @PrimaryKeyJoinColumn(...), które nie mają do wkładania i parametry mogą być aktualizowane, jest taka sama jakJPA: jest @PrimaryKeyJoinColumn (...) tak samo, jak @JoinColumn (..., insertable =?, Updatable =?)?

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

lub

@JoinColumn (..., wkładane = true, updatable = true)

używane w zwykłych stowarzyszeniach (niezwiązanych z dziedziczeniem)? Czy powinny być wymienne? Do czego są ustawiane właściwości wstawiane i aktualizowalne? Czy w ogóle są ustawione? Uwaga, mam tylko do odczytu kierowania atrybut tylko, że zarówno (wydaje się) wdrożyć ...

Dostaję dość niespójne wyjątek mapowania z EclipseLink i hibernacji ...

Oto @PrimaryKeyJoinColumn JavaEE 5 + 6 Javadoc:

PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)

Cytat:

... i może być używany w odwzorowaniu OneToOne, w którym klucz podstawowy encji odwołującej jest używany jako klucz obcy dla przywoływanej jednostki.

+0

nawet więcej - jeśli spojrzeć na zalecenia thir dokonywania jeden-do-jednego związku w różnych wersjach API - wygląda na to, że nie zaleca się używania '@ PrimaryKeyJoinColumn' do tworzenia relacji. [java5] (http://docs.oracle.com/javaee/5/api/javax/persistence/OneToOne.html) kontra [java6] (http://docs.oracle.com/javaee/6/api /javax/persistence/OneToOne.html) – msangel

Odpowiedz

13

Tak, oba są równoważne.

Uwaga w JPA 2.0 można również dodać mapowanie @Id do mapowania @OneToOne i unikać posiadania duplikatu podstawowego atrybutu id.

Zobacz

ze stron WikiBooks Java Persistence

+0

Dzięki !: "Ponieważ teraz masz dwa mapowania dla tej samej kolumny klucza obcego, musisz zdefiniować, który z nich zostanie zapisany do bazy danych (musi to być Basic), więc OneToOne lub Klucz obcy ManyToOne musi być zdefiniowany jako "tylko do odczytu", poprzez ustawienie atrybutów JoinColumn, które można wstawiać i aktualizować do wartości false, lub używając kolumny @PrimaryKeyJoinColumn zamiast @JoinColumn. " – Kawu

+0

Oznacza to, że będę musiał złożyć zgłoszenie błędu dla EclipseLink, ponieważ zamiana @JoinColumn (..., insertable = false, updatable = false) z @PrimaryKeyJoinColumn (...) wyrzuca MappingExceptions ... – Kawu

+0

drugie łącze powinno być : http://pl.wikibooks.org/wiki/Java_Persistence/OneToOne#Target_Foreign_Keys.2C_Primary_Key_Join_Columns.2C_Cascade_Primary_Keys – Kawu

Powiązane problemy