ヘッダーをスキップ
Oracle Fusion Middleware Oracle TopLink開発者ガイド
11gリリース1(11.1.1)
B56246-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

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

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

この章の内容は次のとおりです。

複数のマッピング・タイプに共通のTopLinkマッピング・オプションを構成する方法の詳細は、第121章「マッピングの構成」を参照してください。

TopLinkマッピングの作成方法の詳細は、第120章「マッピングの作成」を参照してください。

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

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

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

例32-1は、Javaコードによる可変1対1マッピングの作成方法とディスクリプタへの追加方法を示します。

例32-1 可変1対1マッピング

public void customize(ClassDescriptor descriptor) {
    VariableOneToOneMapping mapping = new VariableOneToOneMapping();

    // configure mapping
    ...

    // add mapping to descriptor
    descriptor.addMapping(mapping);
}

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

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

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

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

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

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

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

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

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

32.2.1 TopLink Workbenchを使用したクラス・インジケータの構成方法

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

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

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

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

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

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

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

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

32.2.2 Javaを使用したクラス・インジケータの構成方法

例32-2は、Javaコードでクラス(タイプ)インジケータを使用した可変1対1マッピングの定義方法を示します。

例32-2 クラス・インジケータを使用した可変1対1マッピングの定義

public void customize(ClassDescriptor descriptor) {
    VariableOneToOneMapping variableOneToOneMapping =
                                  new VariableOneToOneMapping();
    variableOneToOneMapping.setAttributeName("contact");
    variableOneToOneMapping.setReferenceClass (Contact.class);
    variableOneToOneMapping.setForeignQueryKeyName ("C_ID", "id");
    variableOneToOneMapping.setTypeFieldName("TYPE");

    // configure class indicators
    variableOneToOneMapping.addClassIndicator(Email.class, "Email");
    variableOneToOneMapping.addClassIndicator(Phone.class, "Phone");

    variableOneToOneMapping.dontUseIndirection();
    variableOneToOneMapping.privateOwnedRelationship();

    // add mapping to descriptor
    descriptor.addMapping(variableOneToOneMapping);
}

VariableOneToOneMappingで使用可能なメソッドの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。

32.3 一意の主キーの構成

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

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

32.3.1 TopLink Workbenchを使用した一意の主キーの構成方法

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

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

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

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

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

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

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

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

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


注意:

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

32.3.2 Javaを使用した一意の主キーの構成方法

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

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

public void customize(ClassDescriptor descriptor) {
    VariableOneToOneMapping variableOneToOneMapping =
                                  new VariableOneToOneMapping();
    variableOneToOneMapping.setAttributeName("contact");
    variableOneToOneMapping.setReferenceClass(Contact.class);
    variableOneToOneMapping.setForeignQueryKeyName("C_ID", "id");
    variableOneToOneMapping.dontUseIndirection();
    variableOneToOneMapping.privateOwnedRelationship();

    // add mapping to descriptor
    descriptor.addMapping(variableOneToOneMapping);
}

VariableOneToOneMappingで使用可能なメソッドの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。

32.3.3 一意の主キーについて

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

図32-4 一意の主キーによる可変1対1リレーションシップ

図32-4の説明が続きます
「図32-4 一意の主キーによる可変1対1リレーションシップ」の説明

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

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

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

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

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

32.4 問合せキー・アソシエーションの構成

この項では、Javaなどの開発ツールを使用した、問合せキー関連付けの構成について説明します。

32.4.1 TopLink Workbenchを使用した問合せキー・アソシエーションの構成方法

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

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

  2. 「問合せキー・アソシエーション」タブをクリックします。「問合せキー・アソシエーション」タブが表示されます。

    図32-5 「問合せキー・アソシエーション」タブ

    図32-5の説明が続きます
    「図32-5 「問合せキー・アソシエーション」タブ」の説明

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

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

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

32.4.2 Javaを使用した問合せキー・アソシエーションの構成方法

問合せキー・アソシエーションを構成するためのAPIは、oracle.toplink.mappings.VariableOneToOneMappingのメソッドaddForeingQueryKeyName(String, String)です。

VariableOneToOneMappingで使用可能なメソッドの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。