この章では、リレーショナル多対多マッピングを使用するために構成する必要がある様々なコンポーネントについて説明します。
この章の内容は次のとおりです。
複数のマッピング・タイプに共通のTopLinkマッピング・オプションを構成する方法の詳細は、第121章「マッピングの構成」を参照してください。
TopLinkマッピングの作成方法の詳細は、第120章「マッピングの作成」を参照してください。
表34-1は、リレーショナル多対多マッピングの構成可能オプションを示します。
表34-1は、リレーショナル多対多マッピングの構成可能オプションを示します。
表34-1 リレーショナル多対多マッピングの構成可能オプション
| 構成オプション | Oracle JDeveloper | TopLink Workbench | Java | 
|---|---|---|---|
| 参照ディスクリプタ(28.4項「参照ディスクリプタの構成」を参照) |  |  |  | 
| メソッドまたは直接フィールド・アクセス(121.6項「マッピング・レベルでのメソッドまたは直接フィールド・アクセスの構成」を参照) |  |  |  | 
| 読取り専用マッピング(121.2項「読取り専用マッピングの構成」を参照) |  |  |  | 
| プライベート・リレーションシップまたは独立したリレーションシップ(121.7項「プライベート・リレーションシップまたは独立したリレーションシップの構成」を参照) |  |  |  | 
| バッチ読取り(28.5項「バッチ読取りの構成」を参照) |  |  |  | 
| インダイレクション(遅延ロード)(121.3項「インダイレクション(遅延ロード)の構成」を参照) |  |  |  | 
| 双方向リレーションシップ(121.18項「双方向リレーションシップの構成」を参照) |  |  |  | 
| コンテナ・ポリシー(121.14項「コンテナ・ポリシーの構成」を参照) |  |  |  | 
| マッピング・コメント(121.8項「マッピング・コメントの構成」を参照) |  |  |  | 
| リレーショナル表(34.2項「リレーショナル表の構成」を参照) |  |  |  | 
| 表およびフィールド参照(28.7項「表およびフィールド参照の構成(外部キーおよびターゲット外部キー)」を参照)(ソース) |  |  |  | 
| 表およびフィールド参照(28.7項「表およびフィールド参照の構成(外部キーおよびターゲット外部キー)」を参照)(ターゲット) |  |  |  | 
| 問合せキー順序(28.6項「問合せキー順序の構成」を参照) |  |  |  | 
例34-1は、Javaコードによる多対多マッピングの作成方法とディスクリプタへの追加方法を示します。
例34-1 多対多マッピング
public void customize(ClassDescriptor descriptor) {
    ManyToManyMapping mapping = new ManyToManyMapping();
    // configure mapping
    ...
    // add mapping to descriptor
    descriptor.addMapping(mapping);
}
詳細は、次を参照してください。
JPAを使用した多対多マッピングの構成の詳細は、『EclipseLink Developer's Guide』の「@ManyToMany」(http://wiki.eclipse.org/Introduction_to_EclipseLink_JPA_%28ELUG%29#.40ManyToMany)を参照してください。
リレーション表には、多対多マッピングに関与するソース表およびターゲット表の主キーの列が含まれます。マッピングの完成前に、この表をデータベースに作成する必要があります。データベース表の作成の詳細は、5.5項「データベースの使用」を参照してください。
図27-5では、PROJ_EMP表がPROJECT表とEMPLOYEE表の間のリレーション表の役割を果します。
マッピングのリレーション表を選択するには、次の手順を実行します。
ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「リレーション表」フィールドを使用して、このマッピングを定義するデータベース表を選択します。
多対多マッピングは、ソース・オブジェクトのコレクションとターゲット・オブジェクトのコレクションの間のリレーションシップを表します。この場合、ソースとターゲットのレコード間の関連を管理するための中間表が必要です。
多対多マッピングは、ManyToManyMappingクラスのインスタンスであり、次の要素を必要とします。
setAttributeNameメソッドを使用して設定されたマップ済の属性。
setReferenceClassメソッドを使用して設定された参照クラス。
setRelationTableName()メソッドを使用して設定されたリレーション表。
setSourceRelationKeyFieldNameメソッドとsetTargetRelationKeyFieldNameメソッドを呼び出して指定した、非コンポジット・ターゲット主キーの場合の外部キー情報。
addSourceRelationKeyFieldNameメソッドまたはaddTargetRelationKeyFieldNameメソッドを呼び出して指定した、ソースまたはターゲットの主キーがコンポジットの場合の外部キー情報。
例34-2 リレーショナル表の構成
public void customize(ClassDescriptor descriptor) {
    // In the Employee class, create the mapping that references Project class
    ManyToManyMapping manyToManyMapping = new ManyToManyMapping();
    manyToManyMapping.setAttributeName("projects");
    manyToManyMapping.setReferenceClass(Project.class);
    // Configure the relational table
    manyToManyMapping.setRelationTableName("PROJ_EMP");
    manyToManyMapping.setSourceRelationKeyFieldName ("EMPID");
    manyToManyMapping.setTargetRelationKeyFieldName ("PROJID");
    // Add mapping to descriptor
    descriptor.addMapping(manyToManyMapping);
}
例34-2に示したAPI以外にも、次の共通APIを多対多マッピングに使用できます。
useBasicIndirection: TopLink ValueHolderインダイレクションを実装します。
useTransparentCollection: 透過インダイレクションを使用すると、この要素によって特殊コレクションがソース・オブジェクトの属性内に配置されます。
dontUseIndirection: インダイレクションは実装されません。
ManyToManyMappingで使用可能なメソッドの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。