JDeveloperでは、ビュー・リンクにより定義された関係を使用して、複数のエンティティ・オブジェクトにアクセスして得られる結果を定義できます。JDeveloperでは、ビュー・リンクにより返されるデータへの容易なアクセスを提供するメソッドをエンティティ・オブジェクト内に作成することで、これを行います。この機能には、次の利点があります。
エンティティ・オブジェクトのルールや計算済属性の定義に使用する、事前定義済ビュー・オブジェクトの結果セットへのアクセスが、より簡単になります。重要なコードは、ほとんどエンティティ・オブジェクト・レベルで実行されます(ここでビジネス検証が実装されます)。
より小さなデータセットを操作できるようになります。ビュー・リンクでは、指定された条件に基づいて返される行の数を制限します。またビュー・オブジェクトにより、列を制限できます。これにより、エンティティ・オブジェクトのビュー・リンク・アクセッサで、エンティティ・オブジェクト・レベルでの計算またはビジネス・ロジックに必要なデータのみを、使用可能にすることができます。
ビュー・リンクにより、あるオブジェクトから関連付けられているオブジェクトへ移動するビジネス・ロジックの記述が容易になります。ビュー・リンクにより関連付けられているビュー・オブジェクトでは、任意のSQL文を使用できます。これらの文により、複雑なフィルタリングや関連するデータセットの制限が可能になります。ビュー・リンクをエンティティ・アクセッサとして公開することにより、ビジネス・ロジック・プログラミング・モデルを、より限定された依存データの関連集合を検索する事前作成済の検索機能で強化できます。
アクセッサは、ビュー・リンクのリンク元ビュー・オブジェクトの選択された属性に対応するエンティティ・オブジェクトにのみ存在します。ビュー・リンク同様、アクセッサは一方向に定義されます。アクセッサでは、ディテール・ビュー・オブジェクトのデータを操作します。
エンティティ・オブジェクトのアクセッサは、インスタンス化した新規ビュー・オブジェクトへパラメータを渡します。ビュー・オブジェクトのデータは、エンティティ・オブジェクト行、指定したビュー・リンクおよびビュー・オブジェクトにより定義されたデータです。
たとえば、次の図に示すように、Dept
エンティティ・オブジェクトおよびEmp
エンティティ・オブジェクトと、それらに対応するビュー・オブジェクトを作成したとします。Dept
エンティティ・オブジェクトには、部門番号(Deptno
)10、20および30に対応する3つの行があります。Emp
エンティティ・オブジェクトでは、退職した従業員の従業員ID(Empno
)がすべて-1に設定されています。また、ビュー・リンクDeptToEmpVL
は、リンク元をDept
とし、Emp
のDeptno
属性をリンク先とするよう定義されているとします。この場合、Dept
エンティティ・オブジェクトは、部門10に該当する従業員のデータを含むビュー・オブジェクトをインスタンス化できます。また、部門20に該当する従業員のデータを含むビュー・オブジェクトもインスタンス化できます。
Dept
エンティティにgetTerminatedEmps
アクセッサを定義できます。これは、Empno
が0未満である従業員レコードを返します。このアクセッサは、まず指定された部門番号に該当する従業員データを含むビュー・オブジェクトを検索します。次に、現在のDept
行について、Empno
<0と一致するレコードに対するイテレータを返します。
前述のとおり、エンティティ・オブジェクトのアクセッサは、ビュー・リンクを通して、リンク先ビュー・オブジェクトにより返されるデータを使用します。アプリケーション・モジュールに、複数レベルのディテールがある場合、ビュー・オブジェクトの結果セットの取得後は、これによって返されるすべてのデータを使用できます。