ヘッダーをスキップ
Oracle TopLink開発者ガイド
10g(10.1.3.1.0)
B31861-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

38 リレーショナル可変1対1マッピングの構成

この章では、リレーショナル可変1対1マッピングを使用するために構成する必要がある様々なコンポーネントについて説明します。

詳細は、次を参照してください。

表38-1に、リレーショナル可変1対1マッピングの構成可能なオプションを示します。

リレーショナル可変1対1マッピング構成の概要

表38-1に、リレーショナル可変1対1マッピングの構成可能なオプションを示します。

クラス・インジケータの構成

可変1対1マッピングでは、図38-1に示されるように、ソース表のインジケータ列を使用して正しいターゲット表を指定できます。この項では、クラス・インジケータの実装について説明します。

ソース表には、クラス・インジケータ・フィールドを介してターゲット表を指定するインジケータ列があります。

図38-1では、行のターゲット(PHONEまたはEMAILのいずれか)を示すTYPE列を持つEMPLOYEE表を示しています。

図38-1 クラス・インジケータ・フィールドを使用する可変1対1マッピング

図38-1の説明が続きます
「図38-1 クラス・インジケータ・フィールドを使用する可変1対1マッピング」の説明

このような可変クラスのリレーションシップを定義する方針は、通常の1対1リレーションシップの定義と類似していますが、次の点が異なります。

あるいは、一意の主キーを使用して正しいターゲットを指定できます。詳細は、「一意の主キーの構成」を参照してください。

TopLink Workbenchの使用

可変1対1マッピングにクラス・インジケータを指定するには、次の手順を実行します。

  1. ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。

  2. 「クラス・インジケータ情報」タブをクリックします。「クラス・インジケータ情報」タブが表示されます。

    図38-2 「クラス・インジケータ情報」タブ

    図38-2の説明が続きます
    「図38-2 「クラス・インジケータ情報」タブ」の説明

「クラス・インジケータ・フィールド」を使用して、可変マッピングのインジケータとして使用する、(マッピングのディスクリプタに関連付けられた)データベース表のフィールドを選択します。

「インジケータ・タイプ」でリストからデータ・タイプを選択して、クラス・インジケータのデータ・タイプを指定します。

各(非抽象)子クラスに特定のクラス・インジケータ・フィールド値を指定するには、「編集」をクリックして、各子クラスに適切な値を入力します。

一意の主キーの構成

可変1対1マッピングでは、図38-3に示されるように、ソース表の一意の主キーを使用して正しいターゲット表を指定できます。この項では、クラス・インジケータの実装について説明します。

あるいは、クラス・インジケータを使用して正しいターゲットを指定できます。詳細は、「クラス・インジケータの構成」を参照してください。

一意の主キーの概要

図38-3に示されるように、ターゲット表の主キーにマップされるソース表の外部キーの値(C_ID)は一意です。複数のターゲット表の中で同一の主キー値はありません。このため、主キー値は1つの表の中だけで一意なのではなく、複数の表の中でも一意です。

図38-3 一意の主キーによる可変1対1マッピング

図38-3の説明が続きます
「図38-3 一意の主キーによる可変1対1マッピング」の説明

ソース表に格納されているインジケータがない場合、TopLinkでは外部キー値がマップされるターゲット表を特定できません。このため、TopLinkはターゲット表のどれかにエントリが見つかるまで、すべてのターゲット表を読み取ります。これは、非効率的なリレーション・モデルの設定方法です。クラス・インジケータは、データを取得するために表で実行される読取り数を削減するため、非常に効率的です。クラス・インジケータ方法では、TopLinkはデータ検索のためにどのターゲット表を調べるかを正確に特定します。

このような可変クラスのリレーションシップを定義する方針は、クラス・インジケータ可変1対1リレーションシップの定義と類似していますが、次の点が異なります。

  • タイプ・インジケータ・フィールドが指定されません。

  • クラス・インジケータ値が指定されません。

TopLinkは最終的にデータが検索されるまで、すべてのターゲット表を検索するため、タイプ・インジケータ・フィールドおよびその値は必要ではありません。

TopLink Workbenchの使用

主キーを使用して可変1対1マッピングを指定するには、次の手順を実行します。

  1. ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。

  2. 「クラス・インジケータ情報」タブをクリックします。「クラス・インジケータ情報」タブが表示されます。

    図38-4 「クラス・インジケータ情報」タブ、主キーの構成

    図38-4の説明が続きます
    「図38-4 「クラス・インジケータ情報」タブ、主キーの構成」の説明

「クラス・インジケータ・フィールド」を使用して、「何も選択されていません」を選択します。

「インジケータ・タイプ」を使用して、「何も選択されていません」を選択します。

「インジケータ値」列には何も指定しません。

マッピングの参照ディスクリプタを選択した後、「インクルード」チェック・ボックスの選択を解除します。


注意:

ソース表の外部キー値が一意でない場合は、「クラス・インジケータ・フィールド」の値を選択解除できません。

Javaの使用

例38-1に、Javaコードで一意の主キーを使用した可変1対1マッピングの定義方法について示します。

例38-1 一意の主キーを使用した可変1対1マッピングの定義

VariableOneToOneMapping variableOneToOneMapping = new VariableOneToOneMapping();
variableOneToOneMapping.setAttributeName("contact");
variableOneToOneMapping.setReferenceClass (Contact.class);
variableOneToOneMapping.setForeignQueryKeyName ("C_ID", "id");
variableOneToOneMapping.dontUseIndirection();
variableOneToOneMapping.privateOwnedRelationship();

問合せキー関連付けの構成

問合せキー関連付けを構成するためのAPIは、oracle.toplink.mappings.VariableOneToOneMappingのメソッドaddForeingQueryKeyName(String, String)です。

TopLink Workbenchの使用

可変1対1マッピングに使用する問合せキーを指定するには、次の手順を実行します。

  1. ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。

  2. 「問合せキーの関連付け」タブをクリックします。「問合せキーの関連付け」タブが表示されます。

    図38-5 「問合せキーの関連付け」タブ

    図38-5の説明が続きます
    「図38-5 「問合せキーの関連付け」タブ」の説明

次の情報を参照し、タブの各フィールドにデータを入力します。

「インジケータ・タイプ」でリストからデータ・タイプを選択して、クラス・インジケータのデータ・タイプを指定します。

フィールド 説明
外部キー このリレーションシップで外部キーとして使用するデータベース表のフィールド。
問合せキー名 この関連付けでの(参照ディスクリプタからの)問合せキーの名前。詳細は、「問合せキーの構成」を参照してください。