インダイレクションを使用する属性は、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);
}
Copyright © 1997, 2006, Oracle. All rights reserved.