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