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

戻る
戻る
 
次へ
次へ
 

31 マッピングの作成

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

マッピング作成の概要

データベース・マッピングは、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の使用

TopLink Workbenchを使用してマッピングを手動で作成するには、次の手順を実行します。

  1. ナビゲータでディスクリプタを選択します。そのプロパティがエディタに表示されます。

  2. 「ディスクリプタ情報」タブで、ディスクリプタをデータ・ソースと関連付けます(第25章「ディスクリプタの構成」を参照)。ディスクリプタとデータベース表またはスキーマ・コンテキストとの関連付けは、それらの属性をマッピングする前に行う必要があります。

  3. ナビゲータでディスクリプタを開き、その属性を表示します。

  4. 属性を選択して、ツールバー(「コンテキスト・ツールバー」を参照)上で適切なマッピングをクリックするか、属性を右クリックしてメニューから特定のマッピングの「マップ」を選択します(「コンテキスト・メニュー」を参照)。

マッピングを完了するには、第32章「マッピングの構成」を参照して続行してください。

開発時におけるマッピングの自動作成

リレーショナル・データベース・プロジェクトでは、TopLink Workbenchでクラスの属性を類似する名前付きデータベース・フィールドに自動的にマップできます。たとえば、TopLink Workbenchにより、province属性をデータベース・フィールドPROVに、属性streetをフィールドSTに、属性postalCodeをフィールドPOSTAL_CODEにマップできます。

自動マップ機能では、マップされていない属性に対してのみマッピングを作成できます。つまり、以前に定義されているマッピングは変更されません。

プロジェクト全体または特定のクラス、あるいはディスクリプタに対してクラスを自動的にマップできます。


注意:

自動マッパーがクラスに対して正しい表を推測できない場合、自動マップ機能を使用する前にディスクリプタをデータベース表と関連付けると、自動マッパーを補助できます(「関連表の構成」を参照)。

TopLink Workbenchの使用

プロジェクトのすべてのディスクリプタを自動的にマップするには、ナビゲータ・ウィンドウのプロジェクト・アイコンを右クリックし、コンテキスト・メニューから「自動マップ」を選択するか、メニューから「選択」「自動マップ」と選択します。

特定のディスクリプタまたは属性を自動的にマップするには、ディスクリプタまたは属性を選択して右クリックし、コンテキスト・メニューから「自動マップ」を選択するか、メニューから「選択」「自動マップ」と選択します。

デプロイ時におけるマッピングの自動作成

デプロイ時にOC4J EJB CMP EARからプロジェクトを作成する場合、TopLinkのデフォルト・マッピング機能を活用して、デプロイ時にマッピングを自動的に作成できます。

詳細は、次を参照してください。

Oracle LOBデータベース・オブジェクトに対するマッピングの作成

Oracleデータベースでは、大容量のバイナリ・データまたは文字データは、それぞれBLOB(バイナリ・ラージ・オブジェクト)またはCLOB(キャラクタ・ラージ・オブジェクト)として格納されます。LOB値のサイズや使用中のOracleデータベースのバージョンに応じて、値は表の内部または外部に格納されます。

値がデータベースの外部に格納される場合、Oracle TopLinkなどのクライアント・アプリケーションは、LOBロケータを使用してLOB値を書き込む必要があります。Oracle JDBC OCIドライバおよびサーバー・ドライバは、これらのLOB(ラージ・オブジェクト)値をOracle JDBCシン・ドライバとは異なる方法で処理します。

Oracle JDBC OCIドライバまたはサーバー・ドライバの使用

Oracle JDBC OCIドライバまたはサーバー・ドライバを使用する場合、値を書き込む前にLOBロケータを取得するのは、TopLinkではなくドライバです。LOB値の読取りおよび書込みには、任意のTopLinkマッピング・タイプを使用できます。

Oracle JDBC OCIドライバを使用してLOB値をマップするには、次の手順を実行します。

  1. 任意のマッピング・タイプを使用してTopLinkディスクリプタの属性をLOB値にマップします。例31-1は、BLOB値を対象とするフィールドへ直接マッピングの例を示しています。

    例31-1 フィールドへ直接マッピングを使用したBLOBのマッピング

    DirectToField pictureMapping = new DirectToField();pictureMapping.setAttributeName("picture");pictureMapping.setFieldName("IMAGE.PICTURE");descriptor.addMapping(pictureMapping);
    
    
  2. セッションからDatabaseLoginを取得します。

    DatabaseLogin login = session.getLogin();
    
    
  3. 特定のLOB値のパラメータ・バインドを構成します。

    • BLOB値の場合、バイト配列バインディングを有効化して(shouldBindAllParamtersがfalseの場合に)バイト配列がバインドされるように設定し、バインド用ストリームを有効化してバイト配列でストリーム・バインディングが使用されるように設定します。例31-2は、TopLink Workbenchでのパラメータ・バインドの構成方法を示しています。例31-3は、Javaコードでのパラメータ・バインドの構成方法を示しています。

      例31-2 TopLink Workbenchでのパラメータ・バインドの構成

      byte_array.gifの説明が続きます
      図byte_array.gifの説明

      例31-3 Javaコードでのパラメータ・バインドの構成

      login.setUsesByteArrayBinding(true);
      login.setUsesStreamsForBinding(true);
      
      
    • CLOB値の場合、文字列バインディングを有効化して、255文字を超える長い文字列値がキャラクタ・ストリームとしてバンドされるように設定します。例31-4は、TopLink Workbenchでの文字列バインディングの構成方法を示しています。例31-5は、Javaコードでの文字列バインディングの構成方法を示しています。

      例31-4 TopLink Workbenchでの文字列バインディングの構成

      strngbinding.gifの説明が続きます
      図strngbinding.gifの説明

      例31-5 Javaコードでの文字列バインディングの構成

      login.useStringBinding();
      
      

Oracle JDBCシン・ドライバの使用

Oracle JDBCシン・ドライバを使用する場合、値を書き込む前にLOBロケータを取得するのは、TopLinkです。コミット操作時のロケータの取得には、タイプ変換マッピング(「タイプ変換コンバータの構成」を参照)を使用できます。

Oracle JDBCシン・ドライバを使用してLOB値をマップするには、次の手順を実行します。

  1. タイプ変換マッピングを使用してTopLinkディスクリプタの属性をLOB値にマップします。例31-6は、BLOB値を対象とするTopLink Workbenchでのタイプ変換マッピングを示しています。例31-7は、同じマッピングに対応するJavaコードを示しています。

    例31-6 TopLink WorkbenchでのBLOBのマッピング

    blob.gifの説明が続きます
    図blob.gifの説明

    例31-7 JavaコードでのBLOBのマッピング

    TypeConversionMapping pictureMapping = new TypeConversionMapping();
    pictureMapping.set.AttributeName("picture");
    pictureMapping.setFieldName("IMAGE.PICTURE");
    pictureMapping.setFieldClassification(java.sql.Blob.class);
    descriptor.addMapping(pictureMapping);
    
    
  2. セッションからDatabaseLoginを取得します。

    DatabaseLogin login = session.getLogin();
    
    
  3. ロケータ・サポートを提供するプラットフォームを構成します。

    • 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のデータベース・エディタで、適切なプラットフォームを選択します。

    図31-1 TopLink Workbenchでのデータベース・プラットフォームの選択

    図31-1の説明が続きます
    「図31-1 TopLink Workbenchでのデータベース・プラットフォームの選択」の説明

マッピングの削除

TopLink Workbenchを使用している場合、マップされている任意の属性をアンマップできます。

TopLink Workbenchの使用

属性をアンマップ(マッピングを削除)するには、次の手順を実行します。

「アンマップ」ボタン
ナビゲータ・ウィンドウで属性を選択し、「アンマップ」をクリックします。属性を右クリックし、コンテキスト・メニューから「マップ」「アンマップ」を選択しても、属性をアンマップできます。

ディスクリプタまたはJavaパッケージですべての属性をアンマップするには、次の手順を実行します。

すべてのディスクリプタのアンマップ・ボタン
ナビゲータ・ウィンドウでディスクリプタまたはJavaパッケージをクリックし、「アンマップ」「選択したディスクリプタのアンマップ」を選択するか、コンテキスト・メニューから「パッケージのすべてのディスクリプタのアンマップ」を選択します。