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

戻る
戻る
 
次へ
次へ
 

22 リレーショナル・ディスクリプタの作成

この章では、リレーショナル・ディスクリプタの作成方法について説明します。

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

複数のタイプのディスクリプタの作成方法の詳細は、第118章「ディスクリプタの作成」を参照してください。

22.1 リレーショナル・ディスクリプタ作成の概要

ディスクリプタの作成後は、各種オプション(第119章「ディスクリプタの構成」を参照)の構成作業、および作成したディスクリプタを使用してのマッピングの定義作業が必要です。

TopLinkでサポートされているマッピングのタイプに関する詳細は、第17章「マッピングの概要」および第120章「マッピングの作成」を参照してください。

TopLinkでサポートされているディスクリプタのタイプに関する詳細は、16.1項「ディスクリプタ・タイプ」を参照してください。

詳細は、第21章「リレーショナル・ディスクリプタの概要」を参照してください。

22.2 リレーショナル・ディスクリプタの作成

Oracle JDeveloper TopLinkエディタ、TopLink Workbench(22.2.1項「TopLink Workbenchを使用したリレーショナル・ディスクリプタの作成方法」を参照)またはJava(22.2.2項「Javaを使用したリレーショナル・ディスクリプタの作成方法」を参照)を使用してリレーショナル・ディスクリプタを作成できます。

22.2.1 TopLink Workbenchを使用したリレーショナル・ディスクリプタの作成方法

TopLink Workbenchを使用すると、リレーショナル・プロジェクトで次のタイプのディスクリプタを作成できます。

22.2.1.1 リレーショナル・クラス・ディスクリプタの作成

「クラス・ディスクリプタ」アイコン
デフォルトでは、リレーショナル・プロジェクトにJavaクラスを追加するときに(117.3項「プロジェクト・クラスパスの構成」を参照)、TopLink WorkbenchによってそのJavaクラス用のリレーショナル・クラス・ディスクリプタが作成されます。クラス・ディスクリプタは、任意の永続オブジェクトに適用できます。ただし、集約リレーションシップにおいて相手オブジェクトに所有されているオブジェクトは除きます。この種のオブジェクトは、集約ディスクリプタを使用して記述する必要があります(22.2.1.2項「リレーショナル集約ディスクリプタの作成」を参照)。クラス・ディスクリプタを使用すると、集約コレクションおよび集約オブジェクト・マッピングを除く任意のリレーショナル・マッピングを構成できます。

22.2.1.2 リレーショナル集約ディスクリプタの作成

「集約ディスクリプタ」ボタン
集約オブジェクトは、それを所有するオブジェクトに完全に依存するオブジェクトです。集約ディスクリプタでは、表や主キー、または多くの標準のディスクリプタ・オプションは定義しません。これらは、集約ディスクリプタが所有側のディスクリプタから取得するためです。集約マッピングを構成して、ターゲット・オブジェクト内のデータ・メンバーをソース・オブジェクトの基礎となるデータベース表のフィールドに関連付ける場合は(第35章「リレーショナル集約コレクション・マッピングの構成」および第37章「リレーショナル集約オブジェクト・マッピングの構成」を参照)、ターゲット・オブジェクトのディスクリプタを集約として指定する必要があります(23.6項「クラスまたは集約タイプとしてのリレーショナル・ディスクリプタの構成」を参照)。

22.2.1.3 リレーショナル・インタフェース・ディスクリプタの作成

「インタフェース・ディスクリプタ{0}」アイコン
リレーショナル・プロジェクト(117.3項「プロジェクト・クラスパスの構成」を参照)にインタフェースを追加すると、TopLink Workbenchによってそのインタフェース用のインタフェース・ディスクリプタが作成されます。

インタフェースとは、他のクラスが使用できる抽象動作のコレクションです。インタフェースは単なるJava概念であるため、リレーショナル・データベース上での表現は持ちません。したがって、インタフェース用に定義したディスクリプタでは、データベース上のリレーショナル・エンティティはマップできません。

インタフェース・ディスクリプタには、次の要素があります。

  • それ自身の中で記述するJavaインタフェース

  • それ自身の中で実装する親インタフェース

  • 抽象問合せキーのリスト

インタフェース・ディスクリプタには、具象的なデータも表も関連付けられていないため、マッピングを定義することはできません。抽象問合せキーのリストは、インタフェースに対する問合せを発行できるようにするために定義します(119.11項「インタフェース問合せキーの構成」を参照)。インタフェースに対する読取り問合せを発行すると、そのインタフェースの1つ以上のインプリメンタが読み取られます。

22.2.2 Javaを使用したリレーショナル・ディスクリプタの作成方法

例22-1は、Javaコードによるリレーショナル・ディスクリプタの作成方法を示します。

例22-1 Javaでのリレーショナル・ディスクリプタの作成

RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(YourClass.class);

リレーショナル・ディスクリプタを集約ディスクリプタとして設定するには、ClassDescriptorメソッドdescriptorIsAggregateを使用します。集約ディスクリプタとして構成したRelationalDescriptorに対しては、主キーは定義しませんが、Javaを使用する場合は、関連表(23.2項「関連表の構成」を参照)とフィールド・マッピング(第17章「マッピングの概要」を参照)を構成する必要があります。

リレーショナル・ディスクリプタを集約コレクション・マッピング(27.9項「集約コレクション・マッピング」を参照)に追加するには、ClassDescriptorメソッドdescriptorIsAggregateCollectionを使用します。集約コレクション・マッピング用に構成するRelationalDescriptorについては、主キー(119.2項「主キーの構成」を参照)および関連表(23.2項「関連表の構成」を参照)を必ず定義します。ただし、主キーが親と共有の場合には、主キーをマップする必要はありません。

インタフェースに対してリレーショナル・ディスクリプタを構成するには、ClassDescriptorメソッドsetJavaInterfaceにそのインタフェースのjava.lang.Classを渡します。インタフェース・ディスクリプタは、複数のインプリメンタを持つインタフェースにのみ使用してください。インタフェースにインプリメンタが1つしかない場合は、インタフェース・ディスクリプタを作成せずに、そのインプリメンタのディスクリプタのインタフェース・エイリアスを設定します(23.5項「インタフェース・エイリアスの構成」を参照)。