この章の内容は次のとおりです。
データベース・マッピングは、TopLink Mapping WorkbenchまたはJavaコードを使用して作成できます。マッピングの作成および管理には、TopLink Workbenchの使用をお薦めします。
Javaでマッピングを作成する方法の詳細は、『Oracle Application Server TopLink API Reference』を参照してください。
TopLinkでサポートされているマッピングの種類に関する詳細は、「マッピングのタイプ」を参照してください。
開発時にはマッピングは個別に作成できます(「開発時におけるマッピングの手動作成」を参照)。あるいは、TopLinkですべての属性を自動的にマップすることもできます(「開発時におけるマッピングの自動作成」を参照)。
OC4Jを使用するCMPプロジェクトでは、開発時にマッピングが自動的に作成されるようにTopLinkを構成することもできます(「デプロイ時におけるマッピングの自動作成」を参照)
マッピングを作成した後、各種のオプションを構成する必要があります(第32章「マッピングの構成」を参照)。
クラスの各永続フィールドからデータ・ソースへのマッピングは、TopLink WorkbenchまたはJavaコードを使用して手動で作成できます。TopLink Workbenchを使用することをお薦めします。
TopLink Workbenchを使用してマッピングを手動で作成するには、次の手順を実行します。
ナビゲータでディスクリプタを選択します。そのプロパティがエディタに表示されます。
「ディスクリプタ情報」タブで、ディスクリプタをデータ・ソースと関連付けます(第25章「ディスクリプタの構成」を参照)。ディスクリプタとデータベース表またはスキーマ・コンテキストとの関連付けは、それらの属性をマッピングする前に行う必要があります。
ナビゲータでディスクリプタを開き、その属性を表示します。
属性を選択して、ツールバー(「コンテキスト・ツールバー」を参照)上で適切なマッピングをクリックするか、属性を右クリックしてメニューから特定のマッピングの「マップ」を選択します(「コンテキスト・メニュー」を参照)。
マッピングを完了するには、第32章「マッピングの構成」を参照して続行してください。
リレーショナル・データベース・プロジェクトでは、TopLink Workbenchでクラスの属性を類似する名前付きデータベース・フィールドに自動的にマップできます。たとえば、TopLink Workbenchにより、province
属性をデータベース・フィールドPROV
に、属性street
をフィールドST
に、属性postalCode
をフィールドPOSTAL_CODE
にマップできます。
自動マップ機能では、マップされていない属性に対してのみマッピングを作成できます。つまり、以前に定義されているマッピングは変更されません。
プロジェクト全体または特定のクラス、あるいはディスクリプタに対してクラスを自動的にマップできます。
デプロイ時にOC4J EJB CMP EARからプロジェクトを作成する場合、TopLinkのデフォルト・マッピング機能を活用して、デプロイ時にマッピングを自動的に作成できます。
詳細は、次を参照してください。
Oracleデータベースでは、大容量のバイナリ・データまたは文字データは、それぞれBLOB
(バイナリ・ラージ・オブジェクト)またはCLOB
(キャラクタ・ラージ・オブジェクト)として格納されます。LOB
値のサイズや使用中のOracleデータベースのバージョンに応じて、値は表の内部または外部に格納されます。
Oracle8iリリース8.1.6以下では、4KB未満のLOB
値は表内に格納され、4KBを超える値は表外に格納されます。
Oracle8iリリース8.1.7以上では、5.9KB未満のLOB
値は表内に格納され、5.9KBを超える値は表外に格納されます。
値がデータベースの外部に格納される場合、Oracle TopLinkなどのクライアント・アプリケーションは、LOBロケータを使用してLOB値を書き込む必要があります。Oracle JDBC OCIドライバおよびサーバー・ドライバは、これらのLOB(ラージ・オブジェクト)値をOracle JDBCシン・ドライバとは異なる方法で処理します。
Oracle JDBC OCIドライバまたはサーバー・ドライバを使用する場合、値を書き込む前にLOBロケータを取得するのは、TopLinkではなくドライバです。LOB
値の読取りおよび書込みには、任意のTopLinkマッピング・タイプを使用できます。
Oracle JDBC OCIドライバを使用してLOB値をマップするには、次の手順を実行します。
任意のマッピング・タイプを使用してTopLinkディスクリプタの属性をLOB値にマップします。例31-1は、BLOB
値を対象とするフィールドへ直接マッピングの例を示しています。
セッションからDatabaseLoginを取得します。
DatabaseLogin login = session.getLogin();
特定のLOB値のパラメータ・バインドを構成します。
BLOB
値の場合、バイト配列バインディングを有効化して(shouldBindAllParamters
がfalseの場合に)バイト配列がバインドされるように設定し、バインド用ストリームを有効化してバイト配列でストリーム・バインディングが使用されるように設定します。例31-2は、TopLink Workbenchでのパラメータ・バインドの構成方法を示しています。例31-3は、Javaコードでのパラメータ・バインドの構成方法を示しています。
CLOB
値の場合、文字列バインディングを有効化して、255文字を超える長い文字列値がキャラクタ・ストリームとしてバンドされるように設定します。例31-4は、TopLink Workbenchでの文字列バインディングの構成方法を示しています。例31-5は、Javaコードでの文字列バインディングの構成方法を示しています。
Oracle JDBCシン・ドライバを使用する場合、値を書き込む前にLOBロケータを取得するのは、TopLinkです。コミット操作時のロケータの取得には、タイプ変換マッピング(「タイプ変換コンバータの構成」を参照)を使用できます。
Oracle JDBCシン・ドライバを使用してLOB
値をマップするには、次の手順を実行します。
タイプ変換マッピングを使用してTopLinkディスクリプタの属性をLOB値にマップします。例31-6は、BLOB
値を対象とするTopLink Workbenchでのタイプ変換マッピングを示しています。例31-7は、同じマッピングに対応するJavaコードを示しています。
セッションからDatabaseLoginを取得します。
DatabaseLogin login = session.getLogin();
ロケータ・サポートを提供するプラットフォームを構成します。
Oracle8iでは、oracle.toplink.oraclespecific.Oracle8Platform
クラスを使用します。
login.usePlatform(new Oracle8Platform());
Oracle9i Database Serverでは、oracle.toplink.oraclespecific.Oracle9Platform
クラスを使用します。
login.usePlatform(new Oracle9Platform());
Oracle Database 10gでは、oracle.toplink.oraclespecific.Oracle10Platform
クラスを使用します。
login.usePlatform(new Oracle10Platform());
TopLink Workbenchのデータベース・エディタで、適切なプラットフォームを選択します。
TopLink Workbenchを使用している場合、マップされている任意の属性をアンマップできます。
属性をアンマップ(マッピングを削除)するには、次の手順を実行します。
ナビゲータ・ウィンドウで属性を選択し、「アンマップ」をクリックします。属性を右クリックし、コンテキスト・メニューから「マップ」→「アンマップ」を選択しても、属性をアンマップできます。
ディスクリプタまたはJavaパッケージですべての属性をアンマップするには、次の手順を実行します。
ナビゲータ・ウィンドウでディスクリプタまたはJavaパッケージをクリックし、「アンマップ」→「選択したディスクリプタのアンマップ」を選択するか、コンテキスト・メニューから「パッケージのすべてのディスクリプタのアンマップ」を選択します。