インダイレクションを使用する属性はValueHolderInterfaceに準拠する必要があります。Javaクラスを再インポートせずにクラス・エディタで属性タイプを変更できます。必ずJavaコードの属性タイプも変更します。正しく入力されていない属性は不適切としてマークされます。
属性タイプを変更する以外に、アクセッサ・メソッドも変更する場合があります。メソッド・アクセスを使用している場合、インダイレクションそのものへのアクセッサが必要となるため、getメソッドはValueHolderInterfaceに準拠するインスタンスを返し、setメソッドは同様に準拠する1つの引数を受け入れます。インスタンス変数がオブジェクトのかわりにVectorを返す場合は、値ホルダーをコンストラクタで次のように定義します。
どのような場合でも、アプリケーションはgetAddress()メソッドおよびsetAddress()メソッドを使用してAddressオブジェクトにアクセスします。インダイレクションがある場合、TopLinkはインスタンスのデータベースへの保存およびデータベースからの取得の際にgetAddressHolder()メソッドおよびsetAddressHolder()メソッドを使用します。
詳細は、『Oracle Application Server TopLinkアプリケーション開発者ガイド』を参照してください。
例5-2 インダイレクション
次のコードは、Addressへの1対1マッピングのメソッド・アクセスとともにインダイレクションを使用するEmployeeクラスを示しています。
クラス定義が変更されてEmployeeのaddress属性がAddressのかわりにValueHolderInterfaceになり、適切なgetメソッドおよびsetメソッドが提供されます。
// Initialize ValueHolders in Employee Constructor
public Employee() {
address = new ValueHolder();
}
protected ValueHolderInterface address;
// 'Get' and 'Set' accessor methods registered with the mapping and used by OracleAS TopLink.
public ValueHolderInterface getAddressHolder() {
return address;
}
public void setAddressHolder(ValueHolderInterface holder) {
address = holder;
}
// 'Get' and 'Set' accessor methods used by the application to access the attribute.
public Address getAddress() {
return (Address) address.getValue();
}
public void setAddress(Address theAddress) {
address.setValue(theAddress);
}
Copyright © 1997, 2004, Oracle. All rights reserved.