列をPK(別名識別関係)にも昇格させるとどうなりますか?列がPKになっているので、@ Id(...)でタグ付けする必要があります。
派生識別子のこの強化されたサポートは、実際にはJPA 2.0の新しい機能の一部です( JPA 2.0仕様の派生識別子に対応するセクション2.4.1主キーId
を参照)。JPA1.0では、OneToOne
またはを使用できませんManyToOne
。JPA 1.0では、外部キー列のマッピングを使用PrimaryKeyJoinColumn
および定義する必要があります。Basic
Id
ここで問題は、@ Id + @JoinColumnは@PrimaryKeyJoinColumnと同じですか?
同様の結果を得ることができますが、Id
onOneToOne
またはを使用する方ManyToOne
がはるかに簡単であり、派生識別子をJPA2.0にマップするための推奨される方法です。JOINED継承戦略PrimaryKeyJoinColumn
で引き続き使用される可能性があります。JPA2.0仕様の関連セクションの下:
11.1.40PrimaryKeyJoinColumnアノテーション
注釈はPrimaryKeyJoinColumn
、別のテーブルに結合するための外部キーとして使用される主キー列を指定します。
アノテーションは、マッピング戦略のエンティティサブクラスのプライマリテーブルをそのスーパークラスのプライマリテーブルPrimaryKeyJoinColumn
に結合するために使用されます。JOINED
注釈内で
SecondaryTable
、セカンダリテーブルをプライマリテーブルに結合するために使用されます。OneToOne
また、参照エンティティの主キーが参照エンティティへの外部キーとして使用されるマッピングで使用される場合があります[108]。
..。
JOINEDマッピング戦略でサブクラスに注釈が指定されていない場合PrimaryKeyJoinColumn
、外部キー列は、スーパークラスの主テーブルの主キー列と同じ名前であると見なされます。
..。
例: 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 Persistencewikiブックの主な寄稿者であるJamesSutherlandからのこのメッセージを参照してください)。ただし、これはJPA1.0の一部ではありません。