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, Idbir OneToOneveya ManyToOne. JPA 1.0 ile, yabancı anahtar sütunu için PrimaryKeyJoinColumnbir Basic Ideş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 OneToOneya ManyToOneolduğu daha basit ve JPA 2.0 ile türetilmiş tanımlayıcıları eşlemek için tercih edilen yoldur. PrimaryKeyJoinColumnhala bir KATILMIŞ miras stratejisinde kullanılabilir. JPA 2.0 spesifikasyonundan ilgili bölümün altında:
11.1.40 PrimaryKeyJoinColumn Ek Açıklaması
PrimaryKeyJoinColumnAçıklama, başka bir tabloya katılması için yabancı bir anahtar olarak kullanılan bir ana anahtar sütunu belirtir.
PrimaryKeyJoinColumnAçı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; SecondaryTableikincil 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 PrimaryKeyJoinColumn2.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 OneToOneve ManyToOneEclipseLink 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 .