この章では、リレーショナル・ダイレクト・コレクション・マッピングを使用するために構成する必要がある様々なコンポーネントについて説明します。
この章の内容は次のとおりです。
複数のマッピング・タイプに共通のTopLinkマッピング・オプションを構成する方法の詳細は、第121章「マッピングの構成」を参照してください。
TopLinkマッピングの作成方法の詳細は、第120章「マッピングの作成」を参照してください。
表36-1は、リレーショナル・ダイレクト・コレクション・マッピングの構成可能オプションを示します。
表36-1は、リレーショナル・ダイレクト・コレクション・マッピングの構成可能オプションを示します。
表36-1 リレーショナル・ダイレクト・コレクション・マッピングの構成可能オプション
オプション | Oracle JDeveloper |
TopLink Workbench |
Java |
---|---|---|---|
ターゲット表(36.2項「ターゲット表の構成」を参照) |
|||
ダイレクト値フィールド(36.3項「ダイレクト値フィールドの構成」を参照) |
|||
メソッドまたは直接フィールド・アクセス(121.6項「マッピング・レベルでのメソッドまたは直接フィールド・アクセスの構成」を参照) |
|||
読取り専用マッピング(121.2項「読取り専用マッピングの構成」を参照) |
|||
バッチ読取り(28.5項「バッチ読取りの構成」を参照) |
|||
インダイレクション(遅延ロード)(121.3項「インダイレクション(遅延ロード)の構成」を参照) |
|||
コンテナ・ポリシー(121.14項「コンテナ・ポリシーの構成」を参照) |
|||
マッピング・コメント(121.8項「マッピング・コメントの構成」を参照) |
|||
シリアライズ・オブジェクト・コンバータ(121.9項「シリアライズ・オブジェクト・コンバータの構成」を参照) |
|||
タイプ変換コンバータ(121.10項「タイプ変換コンバータの構成」を参照) |
|||
オブジェクト・タイプ・コンバータ(121.11項「オブジェクト・タイプ・コンバータの構成」を参照) |
|||
表およびフィールド参照(28.7項「表およびフィールド参照の構成(外部キーおよびターゲット外部キー)」を参照) |
例36-1は、Javaコードによるダイレクト・コレクション・マッピングの作成方法とディスクリプタへの追加方法を示します。
例36-1 ダイレクト・コレクション・マッピング
public void customize(ClassDescriptor descriptor) { DirectCollectionMapping mapping = new DirectCollectionMapping(); // configure mapping ... // add mapping to descriptor descriptor.addMapping(mapping); }
詳細は、次を参照してください。
JPAを使用したダイレクト・コレクション・マッピングの構成の詳細は、『EclipseLink Developer's Guide』の「How to Use the @BasicCollection Annotation」(http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29#How_to_Use_the_.40BasicCollection_Annotation
)を参照してください。
それぞれのダイレクト・コレクションはターゲット表に参照情報を格納します。図27-6では、RESPONS
表にコレクションを所有するインスタンスの主キーおよびオブジェクトが含まれます。この表をデータベース内に作成する必要があります。
ダイレクト・コレクションの仕様を指定するには、次の手順を実行します。
ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「ターゲット表」のリストを使用して、ダイレクト・コレクション・マッピングの参照フィールドを含む表を選択します。
ダイレクト・コレクション・マッピングでは、TopLink対応ではないJavaオブジェクトのコレクションを格納します。ダイレクト・コレクションでは通常、String
などのJavaタイプを格納します。
ダイレクト・コレクション・マッピングは、DirectCollectionMapping
クラスのインスタンスであり、次の要素を必要とします。
setAttributeName
メソッドを使用して設定されたマップ済の属性。
setReferenceTableName
メソッドを使用して設定され、コレクションに格納する値があるデータベース表。
値を読み取り、コレクション内に置くための参照表内のダイレクト・フィールドと呼ばれるフィールド。これは、setDirectFieldName
メソッドを使用して設定します。
setReferenceKeyFieldName
メソッドを使用し、ソース・オブジェクトの主キーへの外部参照となるフィールドの名前を渡して指定した外部キー情報。
注意: ターゲットの主キーがコンポジット・キーの場合は、キーを構成する各フィールドについて、addReferenceKeyFieldName メソッドを呼び出します。 |
例36-2 シンプル・ダイレクト・コレクション・マッピングの構成
public void customize(ClassDescriptor descriptor) { DirectCollectionMapping directCollectionMapping = new DirectCollectionMapping(); directCollectionMapping.setAttributeName ("responsibilitiesList"); directCollectionMapping.setReferenceTableName ("RESPONS"); // target table directCollectionMapping.setDirectFieldName ("DESCRIP"); directCollectionMapping.setReferenceKeyFieldName ("EMP_ID"); directCollectionMapping.useCollectionClass (Collection.class); // default // add this mapping to descriptor descriptor.addMapping (directCollectionMapping); }
例36-2に示したAPI以外にも、次の共通APIをダイレクト・コレクション・マッピングに使用できます。
useBasicIndirection
: TopLink ValueHolderインダイレクションを実装します。
useTransparentCollection
: 透過インダイレクションを使用すると、この要素によって特殊コレクションがソース・オブジェクトの属性内に配置されます。
dontUseIndirection
: インダイレクションは実装されません。
DirectCollectionMapping
で使用可能なメソッドの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle TopLink』を参照してください。
参照表内にあるダイレクト値フィールドには、プリミティブ・データの値が格納されます。図27-6では、DESCRIP
フィールドにコレクションが格納されます。
ダイレクト・コレクションの仕様を指定するには、次の手順を実行します。
ナビゲータでマップされた属性を選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「ダイレクト値フィールド」のリストを使用して、コレクションのオブジェクトを含む「ターゲット表」からフィールドを選択します。
例36-2「シンプル・ダイレクト・コレクション・マッピングの構成」は、ダイレクト・フィールドの設定方法を含めた、ダイレクト・コレクション・マッピングの作成方法と構成方法を示します。この例では、このマッピングをディスクリプタに追加する方法も示しています。