この章では、TopLinkマッピングの作成方法について説明します。
この章の内容は次のとおりです。
データベース・マッピングは、Oracle JDeveloper、TopLink WorkbenchまたはJavaコードを使用して作成できます。マッピングの作成および管理には、Oracle JDeveloperまたはTopLink Workbenchの使用をお薦めします。
Javaでマッピングを作成する方法の詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。
TopLinkでサポートされているマッピングの種類に関する詳細は、17.1項「マッピングのタイプ」を参照してください。
開発時にはマッピングは個別に作成できます(120.2項「開発時におけるマッピングの手動作成」を参照)。あるいは、TopLinkですべての属性を自動的にマップすることもできます(120.3項「開発時におけるマッピングの自動作成」を参照)。
OC4Jを使用するCMPプロジェクトでは、開発時にマッピングが自動的に作成されるようにTopLinkを構成することもできます(120.4項「デプロイ時におけるマッピングの自動作成」を参照)。
JPAプロジェクトでは、JPA注釈を使用してマッピングを作成できます(『EclipseLink Developer's Guide』の「Using Metadata Annotations」(http://wiki.eclipse.org/Introduction_to_EclipseLink_JPA_%28ELUG%29#Using_Metadata_Annotations
)を参照)。JPAでは、実行時にマッピングを自動的に作成できます。
マッピングを作成した後、各種のオプションを構成する必要があります(第121章「マッピングの構成」を参照)。
クラスの各永続フィールドからデータ・ソースへのマッピングは、Oracle JDeveloper、TopLink WorkbenchまたはJavaコードを使用して手動で作成できます。Oracle JDeveloperまたはTopLink Workbenchを使用することをお薦めします。
TopLink Workbenchを使用してマッピングを手動で作成するには、次の手順を実行します。
ナビゲータでディスクリプタを選択します。そのプロパティがエディタに表示されます。
「ディスクリプタ情報」タブで、ディスクリプタをそのデータ・ソースと関連付けます。
リレーショナル・プロジェクトの場合は、エディタで、「関連表」メニューからこのディスクリプタ用の表を選択します。
TopLink Workbenchでは、このメニューをプロジェクトに関連付けられているデータベース・ログインからの表を使用して移入します。詳細は、20.4項「プロジェクト・レベルでのログイン情報の構成」を参照してください。
XMLプロジェクトの場合は、エディタで、「スキーマ・コンテキスト」フィールドの横にある「参照」ボタンをクリックして、このディスクリプタに適したスキーマ・コンテキストを選択します。
TopLink Workbenchで、プロジェクトに関連付けられているXMLスキーマからのスキーマ・コンテキストが表示されます。詳細は、5.6項「XMLスキーマの使用」を参照してください。
ナビゲータでディスクリプタを開き、その属性を表示します。
属性を選択して次のいずれかを実行します。
ツールバー上で適切なマッピングをクリックします(5.3.2.2項「コンテキスト・ツールバーの使用」を参照)。
属性を右クリックし、「マップ」を選択して、コンテキスト・メニューから特定のマッピング・タイプを選択します(5.3.1.2項「コンテキスト・メニューの使用」を参照)。
マッピングを完了するには、第121章「マッピングの構成」を参照して続行してください。
次の例のように特定マッピング・タイプのコンストラクタを使用して、マッピングを作成します。
例120-2 リレーショナル・ダイレクト・コレクション・マッピングの作成
oracle.toplink.mappings.DirectCollectionMapping dcm = new DirectCollectionMapping();
リレーショナル・データベース・プロジェクトでは、Oracle JDeveloperおよびTopLink Workbenchでクラスの属性を類似する名前付きデータベース・フィールドに自動的にマップできます。たとえば、これらのツールにより、province
属性をデータベース・フィールドPROV
に、属性street
をフィールドST
に、属性postalCode
をフィールドPOSTAL_CODE
にマップできます。
自動マップ機能では、マップされていない属性に対してのみマッピングを作成できます。つまり、以前に定義されているマッピングは変更されません。
プロジェクト全体または特定のクラス、あるいはディスクリプタに対してクラスを自動的にマップできます。
注意: 自動マッパーがクラスに対して正しい表を推測できない場合、自動マップ機能を使用する前にディスクリプタをデータベース表と関連付けると、自動マッパーを補助できます(23.2項「関連表の構成」を参照)。 |
デプロイ時にOC4J EJB CMP EARからプロジェクトを作成する場合、TopLinkのデフォルト・マッピング機能を活用して、デプロイ時にマッピングを自動的に作成できます。
詳細は、次を参照してください。
Oracleデータベースでは、大容量のバイナリ・データまたは文字データは、それぞれBLOB
(バイナリ・ラージ・オブジェクト)またはCLOB
(キャラクタ・ラージ・オブジェクト)として格納されます。LOB
値のサイズや使用中のOracleデータベースのバージョンに応じて、値は次のように表の内部または外部に格納されます。
Oracle8iデータベース・リリース1.6以下では、4KB未満のLOB
値は表内に格納され、4KBを超える値は表外に格納されます。
Oracle8iデータベース・リリース1.7以上では、5.9KB未満のLOB
値は表内に格納され、5.9KBを超える値は表外に格納されます。
値がデータベースの外部に格納される場合、Oracle TopLinkなどのクライアント・アプリケーションは、LOBロケータを使用してLOB値を書き込む必要があります。Oracle JDBC OCIドライバおよびサーバー・ドライバは、これらのLOB(ラージ・オブジェクト)値をOracle JDBCシン・ドライバとは異なる方法で処理します。
Oracle JDBCシン・ドライバを使用する場合、値を書き込む前にLOBロケータを取得するのは、TopLinkです。コミット操作時のロケータの取得には、タイプ変換マッピング(121.10項「タイプ変換コンバータの構成」を参照)を使用できます。
Oracle JDBCシン・ドライバを使用してLOB
値をマップするには、次の手順を実行します。
タイプ変換マッピングを使用してTopLinkディスクリプタの属性をLOB
値にマップします。表120-1は、BLOB
値を対象とするTopLink Workbenchでのタイプ変換マッピングを示します。例120-5は、同じマッピングに対応するJavaコードを示します。
セッションからDatabaseLogin
を取得します。
DatabaseLogin login = session.getLogin();
次のように、ロケータ・サポートを提供するプラットフォームを構成します。
Oracle8iデータベースでは、oracle.toplink.platform.database.oracle.Oracle8Platform
クラスを使用します。
login.usePlatform(new Oracle8Platform());
Oracle9iデータベースでは、oracle.toplink.platform.database.oracle.Oracle9Platform
クラスを使用します。
login.usePlatform(new Oracle9Platform());
Oracle Database 10gでは、oracle.toplink.platform.database.oracle.Oracle10Platform
クラスを使用します。
login.usePlatform(new Oracle10Platform());
Oracle Database 11gでは、oracle.toplink.platform.database.oracle.Oracle11Platform
クラスを使用します。
login.usePlatform(new Oracle10Platform());
TopLink Workbenchのデータベース・エディタで、適切なプラットフォームを選択します。
Oracle JDeveloperやTopLink Workbenchを使用している場合、マップされている任意の属性をアンマップできます。
属性をアンマップ(マッピングを削除)するには、次の手順を実行します。
ナビゲータ・ウィンドウで属性を選択し、「アンマップ」をクリックします。属性を右クリックし、コンテキスト・メニューから「マップ」→「アンマップ」を選択しても、属性をアンマップできます。
ディスクリプタまたはJavaパッケージですべての属性をアンマップするには、次の手順を実行します。
ナビゲータ・ウィンドウでディスクリプタまたはJavaパッケージをクリックし、「アンマップ」→「選択したディスクリプタのアンマップ」を選択するか、コンテキスト・メニューから「パッケージのすべてのディスクリプタのアンマップ」を選択します。