Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


8.6.5 デフォルトマッピング(単方向のリレーションシップ)

単方向のリレーションシップには,Single-ValuedリレーションシップとMulti-Valuedリレーションシップがあります。それぞれのリレーションシップについて説明します。

ここでは,単方向のリレーションシップのデフォルトマッピングについて説明します。

〈この項の構成〉

(1) 単方向のSingle-Valuedリレーションシップ

単方向のOneToOneリレーションシップと単方向のManyToOneリレーションシップのデフォルトマッピングについて説明します。

(a) 単方向のOneToOneリレーションシップ

次に示す条件の場合に適用される単方向のOneToOneリレーションシップのデフォルトマッピングについて説明します。

条件
  • エンティティAは,エンティティBの単体のインスタンスを参照して,@OneToOne(または,O/Rマッピングファイルで該当するXMLタグ)を設定します。

  • エンティティBからは,エンティティAを参照しません。

  • エンティティAがリレーションシップの所有者となります。

適用されるデフォルトマッピング
  • エンティティAは,テーブルAにマップされます。

  • エンティティBは,テーブルBにマップされます。

  • テーブルAは,テーブルBに対する外部キーを持つ必要があります。外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAのリレーションシップのプロパティ(または,フィールド)の名前_テーブルBのプライマリキー列の名前

    注 斜体は可変値を表します。

外部キー列は,テーブルBのプライマリキーと同じ型を持ち,ユニークキー制約です。

図8‒9 単方向のOneToOneでのデフォルトマッピング

[図データ]

(b) 単方向のManyToOneリレーションシップ

次に示す条件の場合に適用される単方向のManyToOneリレーションシップのデフォルトマッピングについて説明します。

条件
  • エンティティAは,エンティティBの単体のインスタンスを参照し,@ManyToOne(または,O/Rマッピングファイルで該当するXMLタグ)を設定します。

  • エンティティBからは,エンティティAを参照しません。

適用されるデフォルトマッピング
  • エンティティAは,テーブルAにマップされます。

  • エンティティBは,テーブルBにマップされます。

  • テーブルAは,テーブルBに対する外部キーを持つ必要があります。外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAのリレーションシップのプロパティ(またはフィールド)の名前_テーブルBのプライマリキー列の名前

    注 斜体は可変値を表します。

外部キー列は,テーブルBのプライマリキーと同じ型を持つ必要があります。

図8‒10 単方向のManyToOneでのデフォルトマッピング

[図データ]

(2) 単方向のMulti-Valuedリレーションシップ

単方向のOneToManyリレーションシップと単方向のManyToManyリレーションシップのデフォルトマッピングについて説明します。

(a) 単方向のOneToManyリレーションシップ

次に示す条件の場合に適用される単方向のOneToManyリレーションシップのデフォルトマッピングについて説明します。

条件
  • エンティティAは,エンティティBのコレクションを参照します。コレクションに@OneToMany(または,O/Rマッピングファイルで該当するXMLタグ)を設定します。

  • エンティティBからは,エンティティAを参照しません。

  • エンティティAがリレーションシップの所有者です。

適用されるデフォルトマッピング
  • エンティティAは,テーブルAにマップされます。

  • エンティティBは,テーブルBにマップされます。

  • テーブルA,Bのほかに,所有者側のテーブルの名前が最初にくるA_Bという名前の結合表が必要となります。この結合表は,二つの外部キー列を持ちます。

    一つ目の外部キー列は,テーブルAを参照し,テーブルAのプライマリキーと同じ型を持ちます。この外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAの名前_テーブルAのプライマリキー列の名前

    また,もう一つの外部キー列は,テーブルBを参照し,テーブルBの外部キーと同じ型を持ち,ユニークキー制約があります。この外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAのリレーションシッププロパティ(またはフィールド)の名前_テーブルBのプライマリキー列の名前

    注 斜体は可変値を表します。

    注意事項

    この例のような結合表を使用した単方向のOneToManyリレーションシップは,CJPAプロバイダ以外のJPAプロバイダではサポートされていない可能性があります。単方向のOneToManyリレーションシップで作成したアプリケーションをCJPAプロバイダ以外のJPAプロバイダで動作させる場合は注意してください。

図8‒11 単方向OneToManyでのデフォルトマッピング

[図データ]

(b) 単方向のManyToManyリレーションシップ

次に示す条件の場合に適用される単方向のManyToManyリレーションシップのデフォルトマッピングについて説明します。

条件
  • エンティティAは,エンティティBのコレクションを参照します。コレクションに@ManyToMany(または,O/Rマッピングファイルで該当するXMLタグ)を設定します。

  • エンティティBは,エンティティAを参照しません。

  • 所有者はエンティティAです。

適用されるデフォルトマッピング
  • エンティティAは,テーブルAにマップされます。

  • エンティティBは,テーブルBにマップされます。

  • テーブルA,Bのほかに,所有者側のテーブルの名前が最初にくるA_Bという名前の結合表が必要となります。この結合表は,二つ外部キー列を持ちます。

    外部キー列の一つは,テーブルAを参照し,テーブルAの外部キーと同じ型を持ちます。この外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAの名前_テーブルAのプライマリキーの名前

    また,もう一つの外部キー列は,テーブルBを参照し,テーブルBのプライマリキーと同じ型を持ちます。外部キー列の名前は,次のようになります。

    外部キー列の名前

    エンティティAのリレーションシップのプロパティ(またはフィールド)の名前_テーブルBのプライマリキーの名前

    注 斜体は可変値を表します。

    図8‒12 単方向ManyToManyでのデフォルトマッピング

    [図データ]