インダイレクションを使用する永続クラスは、リレーションシップ属性を値ホルダー属性に置き換える必要があります。値ホルダーは、ValueHolder
などのValueHolderInterface
インタフェースを実装するクラスのインスタンスです。このオブジェクトは、データベースから置き換えるオブジェクトの取得に必要な情報を格納します。アプリケーションが値ホルダーにアクセスしない場合、置き換えられたオブジェクトはデータベースから読み取られません。
メソッド・アクセスの使用時は、マッピングに指定されたget
メソッドおよびset
メソッドは、値ホルダーで参照されるオブジェクトではなくValueHolderInterface
のインスタンスにアクセスします。
値ホルダーに置き換えるオブジェクトを取得するには、ValueHolderInterface
クラスのgetValue()
メソッドおよびsetValue()
メソッドを使用します。これらのメソッドの便利な使用方法は、ValueHolderInterface
のgetValue()
メソッドおよびsetValue()
メソッドを、次の例のようにget
メソッドおよびset
メソッド内に隠すことです。
例5-1 Value Holderインダイレクション
次の図はデータベースから読取り中のEmployee
オブジェクトを表しています。Address
オブジェクトは読み取られてなく、このオブジェクトはアクセスされないかぎり作成されません。
図5-5 読み取られないAddressオブジェクト
次の図のように、アドレスが最初にアクセスされたときValueHolder
がAddress
オブジェクトを読み取って返します。
図5-6 最初のリクエスト
次の図のように、アドレスに対する2回目以降のリクエストはデータベースにアクセスしません。
図5-7 2回目以降のリクエスト
Copyright © 1997, 2006, Oracle. All rights reserved.