インダイレクションを使用する属性はValueHolderInterface
に準拠する必要があります。Javaクラスを再インポートせずにクラス・エディタで属性タイプを変更できます。必ずJavaコードの属性タイプも変更します。正しく入力されていない属性は不適切としてマークされます。
属性タイプを変更する以外に、アクセッサ・メソッドも変更する場合があります。 メソッド・アクセスを使用している場合、インダイレクションそのものへのアクセッサが必要となるため、getメソッドはValueHolderInterface
に準拠するインスタンスを返し、setメソッドは同様に準拠する1つの引数を受け入れます。インスタンス変数がオブジェクトのかわりにVectorを返す場合は、値ホルダーをコンストラクタで次のように定義します。
addresses = new ValueHolder(new 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.