ヘッダーをスキップ
Oracle TopLink開発者ガイド
10g(10.1.3.1.0)
B31861-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

24 ディスクリプタの作成

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

ディスクリプタ作成の概要

ディスクリプタ作成の詳細は、次を参照してください。

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

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

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

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

リレーショナル・ディスクリプタを作成するには、TopLink Workbench(「TopLink Workbenchの使用」を参照)またはJavaコード(「Javaの使用」を参照)を使用します。リレーショナル・ディスクリプタを作成および管理するには、TopLink Workbenchを使用することをお薦めします。

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

TopLink Workbenchの使用

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

リレーショナル・クラス・ディスクリプタ

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

リレーショナル集約ディスクリプタ

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

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

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

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

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

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

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

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

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

Javaの使用

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

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

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

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

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

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

オブジェクト・リレーショナル・ディスクリプタの作成

オブジェクト・リレーショナル・ディスクリプタの作成は、TopLink Workbenchではできません。Javaコードを使用する必要があります。Javaコードでディスクリプタを作成する方法の詳細は、『Oracle Application Server TopLink API Reference』を参照してください。

詳細は、「オブジェクト・リレーショナル・ディスクリプタ」を参照してください。

Javaの使用

オブジェクト・リレーショナル・ディスクリプタを定義するには、ObjectRelationalDescriptorクラスを使用します。このクラスは、RelationalDescriptorを拡張して次のメソッドを追加したものです。

  • setStructureName: このメソッドをコールすることで、データ・ソース内でこのオブジェクト・クラスを表現するオブジェクト・リレーショナル構造の名前を設定できます。

  • addFieldOrdering: このメソッドを繰り返しコールすることで、オブジェクトの属性をデータ・ソースに永続化する順序を定義できます。オブジェクト・リレーショナル・データ・ソース・ドライバでJDBCの索引付き配列が使用されている場合には、このメソッドにより、TopLinkが使用するフィールド索引を定義します。

例24-2は、Oracleデータベースのオブジェクト・リレーショナル機能を使用してOracleデータベースにマップされるEmployeeオブジェクトを示しています。

例24-2 Employeeクラス

public class Employee {
    Long id;
    String firstName;
    String lastName;

    ...
}

例24-3は、Employeeオブジェクトをデータベースでモデル化するために作成したオブジェクト・リレーショナル・データベース・タイプ(Employee_t)を示しています。このようなオブジェクト・リレーショナル・データベース・タイプは、構造とも呼ばれます。

例24-3 Employeeオブジェクト・リレーショナル・データ・モデル

CREATE TYPE EMPLOYEE_T AS OBJECT(    ID NUMBER(10),    F_NAME VARCHAR2(100),    L_NAME VARCHAR2(100),) NOT FINAL;

CREATE TABLE EMPLOYEES OF TYPE EMPLOYEE_T;

例24-4は、オブジェクト・リレーショナル・データベース・タイプEmployee_tを記述するためのオブジェクト・リレーショナル・ディスクリプタを、Javaでコーディングする方法を示しています。

例24-4 Javaでのオブジェクト・リレーショナル・ディスクリプタの作成

import oracle.toplink.objectrelational.*;

ObjectRelationalDescriptor descriptor = new ObjectRelationalDescriptor();
descriptor.setJavaClass(Employee.class);
descriptor.setTableName("EMPLOYEES");
descriptor.setStructureName("EMPLOYEE_T");
descriptor.setPrimaryKeyFieldName("ID");
descriptor.addFieldOrdering("ID");
descriptor.addFieldOrdering("F_NAME");
descriptor.addFieldOrdering("L_NAME");
descriptor.addDirectMapping("id", "OBJECT_ID");
descriptor.addDirectMapping("firstName", "F_NAME");
descriptor.addDirectMapping("lastName", "L_NAME");

オブジェクト・リレーショナル・ディスクリプタの構成方法の詳細は、「オブジェクト・リレーショナル・ディスクリプタの構成」を参照してください。

TopLinkでサポートされるオブジェクト・リレーショナル・マッピングの詳細は、第46章「オブジェクト・リレーショナル・マッピングの概要」を参照してください。

EISディスクリプタの作成

EISディスクリプタを作成するには、TopLink Workbench(「TopLink Workbenchの使用」を参照)またはJavaコード(「Javaの使用」を参照)を使用します。EISディスクリプタを作成および管理するには、TopLink Workbenchを使用することをお薦めします。

詳細は、「EISディスクリプタ」を参照してください。

TopLink Workbenchの使用

TopLink Workbenchを使用すると、EISプロジェクトで次のタイプのEISディスクリプタを作成できます。

EISルート・ディスクリプタ

「EISルート・ディスクリプタ」ボタン
EISディスクリプタの動作を変更するには、そのディスクリプタをルートEISディスクリプタとして構成します「EISディスクリプタのタイプ(ルートまたはコンポジット)の構成」を参照)。EISディスクリプタをルートとして設定する場合は、EISディスクリプタの参照クラスが親クラスであること、つまり、その参照クラスが他のクラスからコンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングを使用して参照されることがないことを、TopLinkランタイムに通知します。EISルート・ディスクリプタを使用すると、サポートされているすべてのマッピングを構成できます。EISルート・ディスクリプタにEISインタラクションを構成することもできます(「EISインタラクションの使用」を参照)。ただし、コンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングを使用してEISルート・ディスクリプタを構成する場合は、定義する参照ディスクリプタはEISコンポジット・ディスクリプタである必要があります。これ以外のEISルート・ディスクリプタにすることはできません。

EISコンポジット・ディスクリプタ

「EISコンポジット・ディスクリプタ」ボタン
デフォルトでは、EISプロジェクトにクラスを追加するときに(「プロジェクト・クラスパスの構成」を参照)、TopLink Workbenchによってそのクラス用のEISディスクリプタが作成され、コンポジット・ディスクリプタとして設定されます。EISディスクリプタをコンポジットとして設定する場合は、EISディスクリプタの参照クラスがコンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングによって参照されることを、TopLinkランタイムに通知します。EISコンポジット・ディスクリプタを使用すると、サポートされているすべてのマッピングを構成できます。ただし、EISコンポジット・ディスクリプタにEISインタラクションを構成することはできません。EISインタラクションを構成できるのは、EISルート・ディスクリプタのみです(「EISルート・ディスクリプタ」を参照)。

Javaの使用

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

例24-5 JavaでのEISディスクリプタの作成

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

EISディスクリプタをコンポジット・ディスクリプタとして設定するには、ClassDescriptorメソッドdescriptorIsAggregateを使用します。

XMLディスクリプタの作成

XMLディスクリプタを作成するには、TopLink Workbench(「TopLink Workbenchの使用」を参照)またはJavaコード(「Javaの使用」を参照)を使用します。XMLディスクリプタを作成および管理するには、TopLink Workbenchを使用することをお薦めします。

詳細は、「XMLディスクリプタ」を参照してください。

TopLink Workbenchの使用

「XMLディスクリプタ」アイコン
XMLプロジェクトにクラスを追加すると(「プロジェクト・クラスパスの構成」を参照)、TopLink Workbenchによってそのクラス用のXMLディスクリプタが作成されます。

XMLディスクリプタは必ずコンポジット・タイプになります。

Javaの使用

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

例24-6 JavaでのXMLディスクリプタの作成

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


注意:

oracle.toplink.ox.XMLDescriptorクラスを使用してください。oracle.toplink.xml.XMLDescriptorは推奨されないクラスですので、使用しないでください。

ディスクリプタの検証

ディスクリプタは、次の方法で検証できます。

ディスクリプタに関するJavaコードの生成

通常は、ディスクリプタ構成をproject.xmlファイルに取得することで、TopLinkランタイムによりこの情報が読み取られ、必要なすべてのディスクリプタ・オブジェクトが作成および構成されます。

あるいは、リレーショナル・プロジェクトの場合にかぎっては、TopLinkプロジェクトをJavaクラス(oracle.toplink.sessions.Project)としてエクスポートすることもできます。このクラスには、すべてのディスクリプタ構成がJava言語で含まれています。これにより、TopLink Workbenchを使用してディスクリプタをすみやかに作成および構成でき、その後で、TopLink Workbenchではサポートされていない機能を手動でコーディングできます。これが、TopLink WorkbenchとJavaを使用してディスクリプタを作成する上で最も効率的な方法です。Javaプロジェクト・クラスは、構成後にコンパイルしてアプリケーションのJARファイルに組み込みます。

詳細は、「プロジェクトJavaソースのエクスポート」を参照してください。