この章では、リレーショナル可変1対1マッピングを使用するために構成する必要がある様々なコンポーネントについて説明します。
詳細は、次を参照してください。
表38-1に、リレーショナル可変1対1マッピングの構成可能なオプションを示します。
表38-1に、リレーショナル可変1対1マッピングの構成可能なオプションを示します。
表38-1 リレーショナル可変1対1マッピングの構成可能なオプション
オプション | タイプ | TopLink Workbench |
Java |
---|---|---|---|
|
基本 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
「プライベート・リレーションシップまたは独立したリレーションシップの構成」 |
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
可変1対1マッピングでは、図38-1に示されるように、ソース表のインジケータ列を使用して正しいターゲット表を指定できます。この項では、クラス・インジケータの実装について説明します。
ソース表には、クラス・インジケータ・フィールドを介してターゲット表を指定するインジケータ列があります。
図38-1では、行のターゲット(PHONEまたはEMAILのいずれか)を示すTYPE列を持つEMPLOYEE表を示しています。
このような可変クラスのリレーションシップを定義する方針は、通常の1対1リレーションシップの定義と類似していますが、次の点が異なります。
参照クラスはJavaインタフェースであり、Javaクラスではありません。ただし、インタフェースの設定方法はまったく同じです。
タイプ・インジケータ・フィールドを指定する必要があります。
マッピングにより作成するオブジェクトのクラスを判別できるように、マッピングに対してクラス・インジケータ値を指定します。
外部キー名およびそれぞれの抽象問合せキーを、ターゲット・インタフェース・ディスクリプタから指定する必要があります。
あるいは、一意の主キーを使用して正しいターゲットを指定できます。詳細は、「一意の主キーの構成」を参照してください。
可変1対1マッピングにクラス・インジケータを指定するには、次の手順を実行します。
ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。
「クラス・インジケータ情報」タブをクリックします。「クラス・インジケータ情報」タブが表示されます。
「クラス・インジケータ・フィールド」を使用して、可変マッピングのインジケータとして使用する、(マッピングのディスクリプタに関連付けられた)データベース表のフィールドを選択します。
「インジケータ・タイプ」でリストからデータ・タイプを選択して、クラス・インジケータのデータ・タイプを指定します。
各(非抽象)子クラスに特定のクラス・インジケータ・フィールド値を指定するには、「編集」をクリックして、各子クラスに適切な値を入力します。
可変1対1マッピングでは、図38-3に示されるように、ソース表の一意の主キーを使用して正しいターゲット表を指定できます。この項では、クラス・インジケータの実装について説明します。
あるいは、クラス・インジケータを使用して正しいターゲットを指定できます。詳細は、「クラス・インジケータの構成」を参照してください。
図38-3に示されるように、ターゲット表の主キーにマップされるソース表の外部キーの値(C_ID)は一意です。複数のターゲット表の中で同一の主キー値はありません。このため、主キー値は1つの表の中だけで一意なのではなく、複数の表の中でも一意です。
ソース表に格納されているインジケータがない場合、TopLinkでは外部キー値がマップされるターゲット表を特定できません。このため、TopLinkはターゲット表のどれかにエントリが見つかるまで、すべてのターゲット表を読み取ります。これは、非効率的なリレーション・モデルの設定方法です。クラス・インジケータは、データを取得するために表で実行される読取り数を削減するため、非常に効率的です。クラス・インジケータ方法では、TopLinkはデータ検索のためにどのターゲット表を調べるかを正確に特定します。
このような可変クラスのリレーションシップを定義する方針は、クラス・インジケータ可変1対1リレーションシップの定義と類似していますが、次の点が異なります。
タイプ・インジケータ・フィールドが指定されません。
クラス・インジケータ値が指定されません。
TopLinkは最終的にデータが検索されるまで、すべてのターゲット表を検索するため、タイプ・インジケータ・フィールドおよびその値は必要ではありません。
主キーを使用して可変1対1マッピングを指定するには、次の手順を実行します。
ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。
「クラス・インジケータ情報」タブをクリックします。「クラス・インジケータ情報」タブが表示されます。
「クラス・インジケータ・フィールド」を使用して、「何も選択されていません」を選択します。
「インジケータ・タイプ」を使用して、「何も選択されていません」を選択します。
「インジケータ値」列には何も指定しません。
マッピングの参照ディスクリプタを選択した後、「インクルード」チェック・ボックスの選択を解除します。
注意: ソース表の外部キー値が一意でない場合は、「クラス・インジケータ・フィールド」の値を選択解除できません。 |
例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)
です。
可変1対1マッピングに使用する問合せキーを指定するには、次の手順を実行します。
ナビゲータで可変1対1マッピングを選択します。その属性がエディタに表示されます。
「問合せキーの関連付け」タブをクリックします。「問合せキーの関連付け」タブが表示されます。
次の情報を参照し、タブの各フィールドにデータを入力します。
「インジケータ・タイプ」でリストからデータ・タイプを選択して、クラス・インジケータのデータ・タイプを指定します。
フィールド | 説明 |
---|---|
外部キー | このリレーションシップで外部キーとして使用するデータベース表のフィールド。 |
問合せキー名 | この関連付けでの(参照ディスクリプタからの)問合せキーの名前。詳細は、「問合せキーの構成」を参照してください。 |