1対1マッピングとは2つのJavaオブジェクト間の単純なポインタ参照のことです。Javaでは、属性に格納される単一ポインタがソース・オブジェクトとターゲット・オブジェクト間のマッピングを表します。リレーショナル・データベース表は外部キーを使用してこれらのマッピングを実装します。
図5-15は、Employeeオブジェクトのaddress属性からAddressオブジェクトへの1対1リレーションシップを示しています。データベースにこの関連を格納するには、address属性とAddressクラス間の1対1マッピングを作成します。このマッピングは、Employeeインスタンスが書き込まれるとEMPLOYEE表のAddressインスタンスのidを格納します。また、Employeeがデータベースから読み込まれるとEmployeeインスタンスをAddressインスタンスにリンクします。AddressにはEmployeeへの参照はないため、Employeeへのマッピングを提供する必要はありません。
1対1マッピングでは通常、ソース表にはターゲット表のレコードへの外部キー参照が含まれます。図5-15では、EMPLOYEE表のADDR_IDフィールドが外部キーです。
図5-15 1対1マッピング
また、ターゲット表にソース表への外部キー参照が含まれる場合の1対1マッピングを実装することもできます。この例では、ADDRESS行に、所属するEmployeeを識別するEMP_IDが含まれるようにデータベースの設計が変更されます。このケースではターゲットもソースへのリレーションシップ・マッピングを保持します。
私有された1対1リレーションシップの更新、挿入および削除の操作は、通常はソースの前にターゲットに対して実行されますが、ターゲットが外部キーを所有する場合は逆の順序で実行されます。ターゲット外部キーは通常、双方向の1対1マッピングで発生します。これは一方が外部キーを保持して、もう一方が固有の表の同じ外部キーを共有するためです。
ターゲット外部キーは、大きなカスケード・コンポジット主キーが存在する場合(つまり、あるオブジェクトの主キーが多数の他のオブジェクトの主キーで構成されている場合)にも発生します。このケースでは、外部キーおよびターゲット外部キーの両方を含む1対1マッピングを保持することが可能です。
外部キーでは、TopLinkは自動的にオブジェクトの行の外部キー値を更新します。ターゲット外部キーでは更新しません。TopLinkマッピング・エディタで、ターゲット外部キー関連が定義されると「ターゲット外部キー」チェック・ボックスが選択されます。
関連をマッピングする際は、関連を正しく定義するため外部キーとターゲット外部キーの違いを理解する必要があります。
関連の2つのクラスがお互いを参照する双方向の関連では、1つのマッピングのみが外部キーを保持します。もう1つのマッピングはターゲット外部キーを保持します。双方向の関連における1つのマッピングが1対多マッピングの場合の詳細は、「可変1対1マッピングの使用」を参照してください。
Copyright © 1997, 2004, Oracle. All rights reserved.