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