ヘッダーをスキップ

インダイレクションを使用するためのJavaクラスの変更

インダイレクションを使用する属性は、ValueHolderInterfaceに準拠する必要があります。属性のタイプは、Javaクラスを再インポートせずに、クラス・エディタで変更できます。必ずJavaコードでも属性のタイプを変更してください。属性を正しく入力しないと、不完全であるとマークされます。

属性タイプを変更する以外に、アクセッサ・メソッドも変更する場合があります。メソッド・アクセスを使用している場合、インダイレクションそのものへのアクセッサが必要となるため、getメソッドはValueHolderInterfaceに準拠するインスタンスを返し、setメソッドは同様に準拠する1つの引数を受け入れます。インスタンス変数がオブジェクトのかわりにVectorを返す場合は、値ホルダーをコンストラクタで次のように定義します。

addresses = new ValueHolder(new Vector());

どのような場合でも、アプリケーションはgetAddress()メソッドおよびsetAddress()メソッドを使用してAddressオブジェクトにアクセスします。インダイレクションがある場合、TopLinkはインスタンスのデータベースへの保存およびデータベースからの取得の際にgetAddressHolder()メソッドおよびsetAddressHolder()メソッドを使用します。

詳細は、『Oracle TopLink Developer's Guide』を参照してください。

例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 Oracle 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);
}


関連トピック

インダイレクションの使用
インダイレクションの理解

Value Holderインダイレクションの使用
インダイレクションの指定
透過的なインダイレクションの指定
Javaのプロキシ・インダイレクションの実装