オブジェクト・リレーショナル・マッピングは、特定オブジェクトのデータ・メンバー・タイプを、Oracle Databaseのような特別なオブジェクト・リレーショナル・データベースでの格納に最適化された構造化データ・ソース表現に変換します。オブジェクト・リレーショナル・マッピングを使用すると、オブジェクト・モデルをオブジェクト・リレーショナル・データ・モデルにマップできます。
オブジェクト・リレーショナル・マッピングとリレーショナル・マッピングは混同しないでください(「リレーショナル・マッピングの概要」を参照)。リレーショナル・マッピングは、オブジェクトのデータ・メンバー・タイプを、サポートされているリレーショナル・データベースの対応するリレーショナル・データベース(SQL)のデータ・ソース表現に変換します。リレーショナル・マッピングを使用すると、オブジェクト・モデルをリレーショナル・データ・モデルにマップすることができます。通常、リレーショナル・マッピングは、サポートされているすべてのリレーショナル・データベースで使用できます。オブジェクト・リレーショナル・マッピングは、オブジェクト・データ・ソース表現をサポートするために最適化された特別のオブジェクト・リレーショナル・データベースにのみ使用できます。
この章の内容は次のとおりです。
TopLinkでは、表46-1に示すオブジェクト・リレーショナル・マッピングをサポートしています。
これらのマッピングを使用すると、オブジェクト・モデルをオブジェクト・リレーショナル・データ・モデルに永続化させることができます。現在、TopLink Workbenchでは、オブジェクト・リレーショナル・マッピングをサポートしていないため、コードで定義するか、修正メソッドを使用して定義する必要があります。
表46-1 TopLinkのオブジェクト・リレーションシップ・マッピングのタイプ
タイプ | 説明 | タイプ | TopLink Workbench | Java |
---|---|---|---|---|
|
オブジェクト・リレーショナルの集約構造(JDBCの |
詳細 |
![]() |
![]() |
|
オブジェクト・リレーショナルの参照(JDBCの |
詳細 |
![]() |
![]() |
|
プリミティブ・データのコレクションをオブジェクト・リレーショナルの配列データ・タイプ(JDBCの |
詳細 |
![]() |
![]() |
「オブジェクト・リレーショナルのオブジェクト配列マッピング」 |
オブジェクト・リレーショナルの配列データ・タイプ(JDBCの |
詳細 |
![]() |
![]() |
|
オブジェクト・リレーショナルのネストした表(JDBCの |
詳細 |
![]() |
![]() |
オブジェクト・リレーショナル・データ・モデルでは、構造は、ユーザー定義のデータ・タイプまたはオブジェクト・タイプです。これは、Javaクラスと同様で、各属性が次のいずれかである属性またはフィールドを定義します。
プリミティブ・データ・タイプ
別の構造
別の構造への参照
TopLinkでは、ネストした構造を、StructureMapping
クラスを使用してマップします。構造マッピングでは、追加設定を行わなくても、null値および共有集約がサポートされます(データベースのオブジェクト・リレーショナル・サポートのため)。
詳細は、「オブジェクト・リレーショナルの構造マッピングの構成」を参照してください。
オブジェクト・リレーショナル・データ・モデルでは、構造は、従来のデータ・モデルにおける外部キーではなく、参照を介して相互に参照します。参照は、ターゲット構造のObjectID
に基づいています。これらは、Javaのオブジェクト参照を表します。
TopLinkでは、ReferenceMapping
クラスを使用して参照をマップします。参照マッピングは、外部キー情報を必要としません(データベースのオブジェクト・リレーショナル・サポートのため)。
詳細は、「オブジェクト・リレーショナルの参照マッピングの構成」を参照してください。
オブジェクト・リレーショナル・データ・モデルでは、構造に配列(他のデータ・タイプのコレクション)を含めることができます。これらの配列には、プリミティブ・データ・タイプまたは他の構造のコレクションを含めることができます。
TopLinkでは、プリミティブ・データ・タイプの配列を、ArrayMapping
クラスを使用してマップします。配列マッピングでは、オブジェクト・リレーショナルの配列データ・タイプ(JDBCのArray
タイプおよびOracleデータベースのVARRAY
タイプ)にマップします。集約構造のコレクションをマップするには、オブジェクト配列マッピングを使用します(「オブジェクト・リレーショナルのオブジェクト配列マッピング」を参照)。
オブジェクト・リレーショナル・データベースでは、配列とその親構造を同じ表に格納します。親構造の表とは異なる表に情報を格納するには、ネストした表マッピングを使用します(「オブジェクト・リレーショナルのネストした表マッピング」を参照)。
配列内のすべての要素を同じデータ・タイプにする必要があります。配列内の要素数により、配列のサイズが制御されます。Oracleデータベースでは、可変サイズの配列(VARRAY
タイプ)を使用できます。
詳細は、「オブジェクト・リレーショナルの配列マッピングの構成」を参照してください。
オブジェクト・リレーショナル・データ・モデルでは、構造に配列(他のデータ・タイプのコレクション)を含めることができます。これらの配列には、プリミティブ・データ・タイプまたは他の構造のコレクションを含めることができます。
TopLinkでは、構造の配列をObjectArrayMapping
クラスを使用してマップします。オブジェクト配列マッピングでは、ターゲット・オブジェクトがソース・オブジェクトと同じ行を共有するコレクション集約リレーションシップを定義します。
このマッピングを、親クラス内の属性に関連付ける必要があります。
詳細は、「オブジェクト・リレーショナルのオブジェクト配列マッピングの構成」を参照してください。
ネストした表タイプは、順序付けられていない要素群をモデル化します。これらの要素は、組込みタイプまたはユーザー定義タイプのいずれかです。ネストした表は、単一列の表として表示したり、ネストした表がオブジェクト・タイプの場合は、複数列の表(オブジェクト・タイプの各属性に対して列が存在する)として表示できます。
TopLinkでは、ネストした表を、NestedTableMapping
クラスを使用してマップします。これは、Javaのオブジェクト参照のコレクションを表します。データベースのオブジェクト・リレーショナル・サポートがあるため、ネストした表マッピングは、外部キー情報(1対多マッピングのように)またはリレーショナル表(多対多マッピングのように)を必要としません。
通常、ネストした表は、他の独立構造への参照の1対多または多対多リレーションシップを表します。ネストした表は、親表に格納されているVARRAY
タイプよりも、問合せおよび結合のサポートに優れています。TopLinkでは、REF
タイプのみのネストした表のマッピングをサポートします。TopLinkでは、構造化データ・タイプは基本的なものを初めとしていっさいサポートされません。このため、かわりに、配列マッピング(「オブジェクト・リレーショナルの配列マッピング」を参照)またはオブジェクト配列マッピング(「オブジェクト・リレーショナルのオブジェクト配列マッピング」を参照)を使用してください。
詳細は、「オブジェクト・リレーショナルのネストした表マッピング」を参照してください。