Sütunu da a / PK (diğer bir deyişle tanımlayıcı ilişki) olarak yükseltirsem ne olur? Sütun artık PK olduğundan, onu @Id (...) ile etiketlemeliyim.
Türetilmiş tanımlayıcıların bu gelişmiş desteği , aslında JPA 2.0'daki yeni öğelerin bir parçasıdır ( JPA 2.0 spesifikasyonundaki Türetilmiş Kimliklere Karşılık Gelen 2.4.1 Birincil Anahtarlar bölümüne bakın ), JPA 1.0, Id
bir OneToOne
veya ManyToOne
. JPA 1.0 ile, yabancı anahtar sütunu için PrimaryKeyJoinColumn
bir Basic
Id
eşleme kullanmanız ve tanımlamanız gerekir .
Şimdi soru şu: @Id + @JoinColumn @PrimaryKeyJoinColumn ile aynı mı?
Sen benzer bir sonuç elde etmek ancak bir kullanarak yapabilirsiniz Id
üstünde OneToOne
ya ManyToOne
olduğu daha basit ve JPA 2.0 ile türetilmiş tanımlayıcıları eşlemek için tercih edilen yoldur. PrimaryKeyJoinColumn
hala bir KATILMIŞ miras stratejisinde kullanılabilir. JPA 2.0 spesifikasyonundan ilgili bölümün altında:
11.1.40 PrimaryKeyJoinColumn Ek Açıklaması
PrimaryKeyJoinColumn
Açıklama, başka bir tabloya katılması için yabancı bir anahtar olarak kullanılan bir ana anahtar sütunu belirtir.
PrimaryKeyJoinColumn
Açıklama bir işletme alt sınıfının birincil tablo birleştirmek için kullanılan JOINED
onun süper birincil tablo eşleme stratejisi; SecondaryTable
ikincil bir tabloyu birincil tabloyla birleştirmek için bir açıklama içinde kullanılır
; ve OneToOne
referans veren varlığın birincil anahtarının referans alınan varlığa [108] yabancı anahtar olarak kullanıldığı bir eşlemede kullanılabilir .
...
Hayır ise PrimaryKeyJoinColumn
ek açıklama KATILDI haritalama stratejisinde bir alt sınıf için belirtilen yabancı anahtar sütunları üst sınıfın birincil tablonun birincil anahtar sütunları aynı isimlere sahip olduğu varsayılır.
...
Örnek: Customer ve ValuedCustomer alt sınıfı
@Entity
@Table(name="CUST")
@Inheritance(strategy=JOINED)
@DiscriminatorValue("CUST")
public class Customer { ... }
@Entity
@Table(name="VCUST")
@DiscriminatorValue("VCUST")
@PrimaryKeyJoinColumn(name="CUST_ID")
public class ValuedCustomer extends Customer { ... }
[108] Bölüm PrimaryKeyJoinColumn
2.4.1.1'de açıklanan türetilmiş kimlik mekanizmaları artık OneToOne eşleme durumu için tercih edilecektir
.
Ayrıca bakınız
Bu kaynak http://weblogs.java.net/blog/felipegaucho/archive/2009/10/24/jpa-join-table-additional-state @ManyToOne ve @Id kullanımının JPA 1.x ile çalıştığını belirtir. Şimdi kim haklı?
Yazar, JPA 1.0 (!) Hakkında bir makale yazmak için EclipseLink'in ön yayın JPA 2.0 uyumlu bir sürümünü ( makale sırasında sürüm 2.0.0-M7 ) kullanıyor. Bu makale yanıltıcıdır, yazar JPA 1.0'ın parçası OLMAYAN bir şey kullanıyor .
Kayıt için, destek Id
üzerinde OneToOne
ve ManyToOne
EclipseLink 1.1'de eklenmiştir (bkz bu mesajı gelen James Sutherland , EclipseLink comitter ve ana katkıyı Java Persistence wiki kitabı). Ama ısrar edeyim, bu JPA 1.0'ın bir parçası DEĞİL .