列をPK(別名識別関係)にも昇格させるとどうなりますか?列がPKになっているので、@ Id(...)でタグ付けする必要があります。
派生識別子のこの強化されたサポートは、実際にはJPA 2.0の新しい機能の一部です(セクション2.4.1 JPA 2.0仕様の派生識別子に対応する主キーを参照)。JPA1.0ではId
、OneToOne
またはを使用できませんManyToOne
。JPA 1.0では、外部キー列のマッピングを使用PrimaryKeyJoinColumn
および定義する必要がありBasic
Id
ます。
ここで問題は、@ Id + @JoinColumnは@PrimaryKeyJoinColumnと同じですか?
同様の結果を得ることができますが、Id
onOneToOne
またはを使用する方ManyToOne
がはるかに簡単であり、派生識別子をJPA2.0にマップするための推奨される方法です。JOINED継承戦略PrimaryKeyJoinColumn
で引き続き使用される可能性があります。JPA 2.0仕様の関連セクションの下:
11.1.40PrimaryKeyJoinColumnアノテーション
PrimaryKeyJoinColumn
注釈は、別のテーブルに参加する外部キーとして使用されている主キー列を指定します。
PrimaryKeyJoinColumn
注釈は、中実体サブクラスのプライマリ・テーブルに参加するために使用されるJOINED
、そのスーパークラスのプライマリ・テーブルへのマッピング戦略を、SecondaryTable
アノテーション内でセカンダリテーブルをプライマリテーブルに結合するために使用され
ます。またOneToOne
、参照エンティティの主キーが参照エンティティへの外部キーとして使用されるマッピングで使用できます[108]。
..。
PrimaryKeyJoinColumn
JOINEDマッピング戦略でサブクラスに注釈が指定されていない場合、外部キー列は、スーパークラスの主テーブルの主キー列と同じ名前であると見なされます。
..。
例: CustomerおよびValuedCustomerサブクラス
@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]セクション2.4.1.1で説明されている派生IDメカニズムはPrimaryKeyJoinColumn
、OneToOneマッピングの場合よりも優先され
ます。
も参照してください
このソースhttp://weblogs.java.net/blog/felipegaucho/archive/2009/10/24/jpa-join-table-additional-stateは、@ ManyToOneと@Idの使用がJPA1.xで機能すると述べています。今誰が正しいですか?
著者は、プレリリースのJPA 2.0準拠バージョンのEclipseLink(記事の時点ではバージョン2.0.0-M7)を使用して、JPA 1.0(!)に関する記事を書いています。この記事は誤解を招く恐れがあります。作成者はJPA1.0の一部ではないものを使用しています。
レコードのサポートのためId
にOneToOne
とManyToOne
のEclipseLink 1.1で追加されている(このメッセージからジェームズ・サザーランド、のEclipseLinkコミッタとの主な要因れるJava Persistenceウィキ本を)。ただし、これはJPA1.0の一部ではないことを主張しておきます。