[解決済み] JPA: @JoinColumnと@PrimaryKeyJoinColumnの違い?
質問
との正確な違いは何ですか?
@JoinColumn
と
@PrimaryKeyJoinColumn
?
あなたは
@JoinColumn
を使います。典型的なカラムは次のようなものです(例えば、属性を追加したジョインテーブルの場合)。
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
もしカラムをPKに昇格させたらどうなりますか?カラムはPKになったので、私はそれを
@Id
:
@Id
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
さて、問題です。
はたして
@Id
+
@JoinColumn
と同じで、単に
@PrimaryKeyJoinColumn
?:
@ManyToOne
@PrimaryKeyJoinColumn(name = "...")
private OtherClass oc;
そうでなければ、何が
@PrimaryKeyJoinColumn
は何のためにあるのでしょうか?
どのように解決するのですか?
<ブロッククオートカラムを PK にも昇格させるとどうなりますか (いわゆる識別関係)?カラムが PK になったので、@Id (...) のタグを付ける必要があります。
この強化されたサポートは
派生識別子
は、実際には
はJPA 2.0で新しく導入されたものです。
の一部です(セクション
2.4.1 派生したIDに対応する主キー
のセクションを参照)、JPA 1.0では
Id
の上に
OneToOne
または
ManyToOne
. JPA 1.0を使用する場合、以下のように
PrimaryKeyJoinColumn
を定義し、さらに
Basic
Id
のマッピングを定義します。
ここで問題なのは、@Id + @JoinColumn は、@PrimaryKeyJoinColumn だけと同じかどうかです。
同じような結果を得ることができますが
Id
の上に
OneToOne
または
ManyToOne
は
よりもはるかに単純な
であり、JPA 2.0で派生識別子をマッピングするための好ましい方法です。
PrimaryKeyJoinColumn
はまだ
JOINED
継承戦略で使用される可能性があります。以下はJPA 2.0仕様の関連セクションです。
11.1.40 PrimaryKeyJoinColumnアノテーション
このアノテーションは
PrimaryKeyJoinColumn
アノテーション は主キーカラムを指定します。 他のテーブルと結合するための外部キーとして使用される を指定します。は
PrimaryKeyJoinColumn
アノテーション の主テーブルを結合するために使用されます。 エンティティのサブクラスでJOINED
マッピング・ストラテジーのエンティティ・サブクラスの主テーブルをそのスーパークラスの主テーブルに結合するために使用されます。 に結合するために使われます。SecondaryTable
アノテーションの中で使用されます。 アノテーションの中で使用されます。 で使用することができます。OneToOne
マッピングで使用されます。 参照するエンティティの主キーが の外部キーとして使われます。 エンティティ [108] ....
もし
PrimaryKeyJoinColumn
アノテーションが指定されていない場合、JOINED マッピング戦略でサブクラス にアノテーションが指定されていない場合、外部キーのカラムは、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の仕組み は、2.4.1.1 節で説明されるようになりました。 よりも優先されます。
PrimaryKeyJoinColumn
よりも優先されるようになりました。 よりも優先されるようになりました。
こちらもご覧ください
このソース http://weblogs.java.net/blog/felipegaucho/archive/2009/10/24/jpa-join-table-additional-state は、@ManyToOneと@Idを使用するとJPA 1.xで動作すると述べています。
著者はプレリリースを使用しています JPA 2.0 に準拠したEclipseLink (バージョン 2.0.0-M7 を使用して、JPA 1.0(!)に関する記事を書いています。) この記事は誤解を招くもので、著者はあるものを使っています。 ではない の部分です。
ちなみに
Id
について
OneToOne
と
ManyToOne
は、EclipseLink 1.1 で追加されました (
このメッセージ
から
ジェームズ・サザーランド
の主な貢献者であり、EclipseLink のコミッターでもある。
Java の永続性
wiki本の主な貢献者です)。しかし、私が主張したいのは、これは
ではありません。
の一部であり、JPA 1.0ではありません。
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み】JPA JoinColumnとmappedByの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
Jsoup-Crawlingの動作
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
アノテーション「@Retention」の役割
-
API の戻り値を処理するために ResponseEntity を使用する
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
アクセス制限の解決方法: ---- in Java