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

戻る
戻る
 
次へ
次へ
 

34 リレーショナル・マッピングの構成

この章では、リレーショナル・マッピングの構成方法について説明します。

表34-1は、構成可能なリレーショナル・マッピング・タイプと、そのタイプで対応している構成可能オプションが記載されたタイプ別の章への相互参照を示しています。

表34-1 リレーショナル・マッピングの構成

作成対象 参照先

フィールドへ直接マッピング


第35章「リレーショナル・フィールドへ直接マッピングの構成」


トランスフォーメーション・マッピング


第45章「リレーショナル・トランスフォーメーション・マッピングの構成」


XMLタイプへ直接マッピング


第36章「リレーショナルXMLタイプへ直接マッピングの構成」


1対1マッピング


第37章「リレーショナル1対1マッピングの構成」


可変1対1マッピング


第38章「リレーショナル可変1対1マッピングの構成」


1対多マッピング


第39章「リレーショナル1対多マッピングの構成」


多対多マッピング


第40章「リレーショナル多対多マッピングの構成」


集約コレクション・マッピング


第41章「リレーショナル集約コレクション・マッピングの構成」


ダイレクト・コレクション・マッピング


第42章「リレーショナル・ダイレクト・コレクション・マッピングの構成」


ダイレクト・マップ・マッピング


第44章「リレーショナル・ダイレクト・マップ・マッピングの構成」


集約オブジェクト・マッピング


第43章「リレーショナル集約オブジェクト・マッピングの構成」



表34-2は、複数のリレーショナル・マッピング・タイプによって共有される構成可能オプションを示します。

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

共通リレーショナル・マッピング・オプションの構成

表34-2は、複数のリレーショナル・マッピング・タイプによって共有される構成可能オプションを示します。ここで説明する構成可能オプション以外にも、表34-1に示すように、特定のリレーショナル・マッピングのタイプについて説明しているオプションも構成する必要があります。

データベース・フィールドの構成

オブジェクト属性をデータベース・フィールドに関連付けることができます。

表34-3では、どのリレーショナル・マッピングがこのオプションをサポートしているかを示します。

表34-3 リレーショナル・マッピングでのデータベース・フィールドのサポート

マッピング TopLink Workbenchの使用
Javaの使用

フィールドへ直接マッピング


サポートされている


サポートされている


XMLタイプへ直接マッピング


サポートされている


サポートされている



データベース・フィールドを選択する際、Javaとデータベース・フィールド・タイプの互換性を考慮する必要があります。

TopLinkは次のJavaタイプをサポートします。

読取りの実行中に、表34-6のマッピングは、表34-4に示す単純な一方向のデータ変換を実行します。双方向またはより複雑な変換の場合は、コンバータを使用する必要があります(「コンバータおよびトランスフォーマ」を参照)。

表34-3のマッピングによって、NULL値を指定することもできます。これは、プリミティブ・タイプがオブジェクトで使用され、データベース・フィールドでnull値を使用できる場合に必要となることがあります。詳細は、「マッピング・レベルでのデフォルトのNULL値の構成」を参照してください。

表34-4 フィールドへ直接マッピングが提供するタイプ変換

Javaタイプ データベース・タイプ

Integer、Float、Double、Byte、Short、BigDecimal、BigInteger、int、float、double、byte、short

NUMBER、NUMERIC、DECIMAL、FLOAT、DOUBLE、INT、SMALLINT、BIT、BOOLEAN

Boolean、boolean

BOOLEAN、BIT、SMALLINT、NUMBER、NUMERIC、DECIMAL、FLOAT、DOUBLE、INT

String

VARCHAR、CHAR、VARCHAR2、CLOB、TEXT、LONG、LONG VARCHAR、MEMO

次のタイプはOracle9のみに適用されます。NVARCHAR2、NCLOB、NCHAR

byte[ ]

BLOB、LONG RAW、IMAGE、RAW、VARBINARY、BINARY、LONG VARBINARY

Time

TIME

sql.Date

DATE(DB2のみに適用)

Timestamp、util.Date、Calendar

TIMESTAMP(DB2のみに適用)

sql.Date、Time、Timestamp、util.Date、Calendar

oracle.sql.TimeStampを使用するには、「oracle.sql.TimeStampのサポート」を参照してください。

DATE、DATETIME(Oracle、Sybase、SQL Serverに適用)


oracle.sql.TimeStampのサポート

TopLinkでは、TopLinkでOracle9i Database Server以上およびOracle9PlatformとともにOracle JDBCドライバを使用する場合にJavaの日付および時間のデータ・タイプをOracleデータベースのDATETIMESTAMPおよびTIMESTAMPTZデータ・タイプにマッピングするための追加サポートを提供します。

フィールドへ直接マッピングでは、フィールド値のデータベース・タイプを指定する必要はありません。TopLinkにより、適切なデータ・タイプ変換が決定されます。

表34-5に、サポートされるフィールドへ直接マッピングの組合せを示します。

表34-5 サポートされるOracleデータベースの日付および時間のフィールドへ直接マッピング

Javaタイプ データベース・タイプ 説明

java.sql.Time

TIMESTAMP

完全双方向サポート。


TIMESTAMPTZ

完全双方向サポート。


DATE

完全双方向サポート。

java.sql.Date

TIMESTAMP

完全双方向サポート。


TIMESTAMPTZ

完全双方向サポート。


DATE

完全双方向サポート。

java.sql.Timestamp

TIMESTAMP

完全双方向サポート。


TIMESTAMPTZ

完全双方向サポート。


DATE

ナノ秒はデータベースに格納されません。

java.util.Date

TIMESTAMP

完全双方向サポート。


TIMESTAMPTZ

完全双方向サポート。


DATE

ミリ秒はデータベースに格納されません。

java.util.Calendar

TIMESTAMP

ネイティブSQLまたはバインドが、Calendarタイムゾーンを提供します。

注意: TIMESTAMPデータベース値には、タイムゾーンがありません。デフォルトでは、Calendarオブジェクトがローカルのタイムゾーンを提供します。データベースがこのタイムゾーンにない場合は、別の方法でデータベース・タイムゾーンを取得し、それに応じてCalendarオブジェクトを更新する必要があります。このため、この場合はTIMESTAMPTZの方が適しています。


TIMESTAMPTZ

ネイティブSQLまたはバインドはタイムゾーンを格納し、標準SQLはローカル・タイムゾーンに基づきます。


DATE

タイムゾーンとミリ秒はどちらも、データベースに格納されません。


前述のマッピングの中には精度が損われるものもあるため、このレベルの精度を求める場合は、これらの組合せを使用しないでください。たとえば、java.sql.Date属性とTIMESTAMPTZデータベース・フィールドの間でフィールドへ直接マッピングを作成した場合、精度は損われません。しかし、java.sql.Timestamp属性とDATEデータベース・フィールドの間でフィールドへ直接マッピングを作成した場合は、属性のナノ秒またはミリ秒がデータベースに格納されません。

TopLink Workbenchの使用

ダイレクト・マッピングで特定のデータベース・フィールドを選択するには、次の手順を実行します。

  1. ナビゲータでダイレクト・マッピングの属性を選択します。そのプロパティがエディタに表示されます。

  2. 「一般」タブをクリックします。「一般」タブが表示されます。

    図34-1 ダイレクト・マッピングの「一般」タブ、「データベース・フィールド」オプション

    図34-1の説明が続きます
    「図34-1 ダイレクト・マッピングの「一般」タブ、「データベース・フィールド」オプション」の説明

「データベース・フィールド」フィールドを使用して、このダイレクト・マッピングのフィールドを選択します。「関連表の構成」で説明されているように、前もってディスクリプタをデータベース表に関連付けておく必要があります。


注意:

集約ディスクリプタのフィールドへ直接マッピングの場合(「クラスまたは集約タイプとしてのリレーショナル・ディスクリプタの構成」を参照)、このフィールドは表示専用で、変更はできません。

参照ディスクリプタの構成

oracle.toplink.mappings.ForeignReferenceMappingの拡張であるリレーショナル・マッピングでは、属性が参照するのはその他のTopLinkディスクリプタであり、データ・ソースではありません。プロジェクトで任意のディスクリプタを選択できます。

表34-6では、どのリレーショナル・マッピングがこのオプションをサポートしているかを示します。

TopLink Workbenchの使用

リレーショナル・マッピングに参照ディスクリプタを指定するには、次の手順を実行します。

  1. ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。

  2. 「一般」タブをクリックします。「一般」タブが表示されます。

    図34-2 「一般」タブ、「参照ディスクリプタ」フィールド

    図34-2の説明が続きます
    「図34-2 「一般」タブ、「参照ディスクリプタ」フィールド」の説明

「参照ディスクリプタ」フィールドを使用して、このリレーションシップ・マッピングで参照するディスクリプタを選択します。


注意:

集約マッピングの場合、「参照ディスクリプタ」は集約である必要があります。詳細は、「クラスまたは集約タイプとしてのリレーショナル・ディスクリプタの構成」を参照してください。

可変1対1マッピングの場合、「参照ディスクリプタ」はインタフェースである必要があります。詳細は、第38章「リレーショナル可変1対1マッピングの構成」を参照してください。


現行TopLink Workbenchプロジェクトにない参照ディスクリプタを指定できます。たとえば、現行プロジェクトにないEmployeeクラスへのマッピングを作成するには、次の手順を実行します。

  1. 現行プロジェクトにEmployeeクラスを追加します。「プロジェクトの使用」を参照してください。

  2. Employeeディスクリプタへのリレーションシップ・マッピングを作成します。

  3. Employeeディスクリプタを非アクティブ化します。「アクティブおよび非アクティブ・ディスクリプタ」を参照してください。

プロジェクトのデプロイXMLを生成すると、Employeeクラスへのマッピングが組み込まれますが、Employeeクラスは含まれません。

バッチ読取りの構成

バッチ読取りは、ほとんどのリレーショナル・マッピングで使用できます。この機能は、関連するオブジェクトが常にソース・オブジェクトとともに必要であることが知られている場合のみ、使用する必要があります。

表34-7は、どのリレーショナル・マッピングがこのオプションをサポートしているかを示します。

TopLink Workbenchの使用

リレーションシップ・マッピングでバッチ読取りを使用するには、次の手順を実行します。

  1. ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。

  2. 「一般」タブをクリックします。「一般」タブが表示されます。

    図34-3 「一般」タブ、「バッチ読取り」オプション

    図34-3の説明が続きます
    「図34-3 「一般」タブ、「バッチ読取り」オプション」の説明

このマッピングでバッチ読取りを使用することを指定するには、「バッチ読取り」オプションを選択します。

Javaの使用

例34-1 バッチを使用する問合せの最適化

次のコードの例では、問合せの最適化に対するバッチの使用を示しています。

// Queries on Employee are configured to always batch read Address
OneToManyMapping phoneNumbersMapping = new OneToManyMapping();
phoneNumbersMapping.setReferenceClass(" PhoneNumber.class")
phoneNumbersMapping.setAttributeName("phones");
phoneNumbersMapping.useBatchReading();
phoneNumbersMapping.privateOwnedRelationship();

問合せキー順序の構成

問合せキー別の順序でコレクションを維持するようTopLinkを構成できます。

表34-8は、どのリレーショナル・マッピングがこのオプションをサポートしているかを示します。

表34-8 リレーショナル・マッピングでの問合せキー順序のサポート

マッピング TopLink Workbenchの使用
Javaの使用

可変1対1マッピング


サポートされている


サポートされている


1対多マッピング


サポートされている


サポートされている


集約コレクション・マッピング


サポートされていない


サポートされている



TopLink Workbenchの使用

マッピングの問合せキーの順序を指定するには、次の手順を実行します。

  1. ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。

  2. 「順序付け」タブをクリックします。「順序付け」タブが表示されます。

    図34-4 「順序付け」タブ

    図34-4の説明が続きます
    「図34-4 「順序付け」タブ」の説明

フィールド 説明
問合せキー 順序付けする問合せキーを指定します。

「追加」をクリックして問合せキーを追加するか、「削除」をクリックして順序付け操作から問合せキーを削除します。

「上へ」または「下へ」をクリックして、選択された問合せキーのソート順序を変更します。

順序 アルファベット順の「昇順」または「降順」のどちらで選択された問合せを順序付けするかを指定します。

表およびフィールド参照の構成(外部キーおよびターゲット外部キー)

外部キーは、別の表内の一意のキー(通常は主キー)を参照する1つ以上のデータベース列の組合せです。主キーと同様、外部キーは任意の数のフィールドで、これらすべてが1つの単位として扱われます。外部キーと参照先の親キーは、フィールドの数およびタイプが同じである必要があります。

oracle.toplink.mappings.ForeignReferenceMappingの拡張であるマッピングでは、ターゲット・オブジェクトをインスタンス化できるように、外部キーを使用してデータベース内の情報を検索します。たとえば、すべてのEmployeeに属性addressがあり、この属性にAddress(独自のディスクリプタおよび表を所有)のインスタンスが含まれている場合、address属性に対する1対1マッピングにより、特定のEmployeeAddressを見つけるための外部キー情報が指定されます。

TopLinkでは、外部キーはマッピングの2つのカテゴリ(外部キーおよびターゲット外部キー)に分類されます。

表参照は、外部キー参照を含むデータベース表です。

表34-9は、どのリレーショナル・マッピングがこのオプションをサポートしているかを示します。

TopLink Workbenchを使用して、この表をデータベースからインポートするか、または作成することができます。データベースから表をインポートする場合(「データベースからの表のインポート」を参照)、TopLinkでは、既存のデータベース制約に対応する参照を作成します(ドライバでサポートされている場合)。また、データベースで同様の制約を作成しなくても、TopLinkで参照を定義することもできます。

TopLink Workbenchの使用

マッピングの参照の表を指定するには、次の手順を実行します。

  1. ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。

  2. 「表参照」タブをクリックします。「参照」タブが表示されます。

    図34-5 「表参照」タブ、「表参照」フィールド

    図34-5の説明が続きます
    「図34-5 「表参照」タブ、「表参照」フィールド」の説明

次の情報を参照し、タブのフィールド参照を選択します。

フィールド 説明
表参照 既存の表を選択するか、または「新規」をクリックして新規の表参照を作成します。
「ソース・フィールド」および「ターゲット・フィールド」 「追加」をクリックして、新規の外部キー参照を作成します。

既存のキー・ペア参照を削除するには、「ソース・フィールド」「ターゲット・フィールド」を選択して「削除」をクリックします。

    ソース・フィールド この外部キー参照のソース表からデータベース・フィールドを選択します。
    ターゲット・フィールド この外部キー参照のターゲット表からデータベース・フィールドを選択します。
    ターゲット外部キー 参照がターゲット・オブジェクトの表からマッピングのディスクリプタの表のキーへの逆方向かどうかを指定します。