ビュー・オブジェクトをSQL問合せ文から動的に作成するには、アプリケーション・モジュールでcreateViewObjectFromQueryStmt()
をコールします。このメソッドはクライアントまたはビジネス・ロジック層からコールできます。どちらの場合も、このメソッドはビュー・オブジェクト・インスタンスを返し、そのインスタンスをメンバーとしてアプリケーション・モジュールのデータ・モデルに追加します。このビュー・オブジェクトはSQL専用で、データの変更には使用できません。また、エキスパート・モードでもあるため、BC4JフレームワークではSELECT * FROM ()
内の問合せがラップされます。このため、使用できるSQLは制限されます。たとえば、次の問合せは使用できます。
SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES
これは、次のようにラップされた場合でも有効であるためです。
SELECT * FROM (SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES)
ただし、次の問合せは使用できません。
SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES FOR UPDATE
これは、次のSQLが有効ではないためです。
SELECT * FROM (SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES FOR UPDATE)
エンティティ・オブジェクトに基づいたビュー・オブジェクト、またはエキスパート・モードではないビュー・オブジェクトを動的に作成する必要がある場合は、「問合せ句からのビュー・オブジェクトの作成」を参照してください。
createViewObjectFromQueryStatement()
には2つのString
引数を指定します。最初の引数はデータ・モデル内のビュー慣用名です。2番目はセミコロンのないSQL問合せです。
String viewUsageName="TempVO";
String query="SELECT Employees.EMAIL FROM EMPLOYEES Employees";
ViewObject mgrvo=am.createViewObjectFromQueryStmt(viewUsageName, query);
注意: このメソッドを使用してビュー・オブジェクトを作成すると、最初にデータをフェッチするとき、問合せが2回実行される場合があります。最初の問合せでは、データ型と精度の情報が収集されます。この情報は、データを適切なJava型にマップし、(最大値よりも低い精度を指定して)問合せの効率を上げるために、後の問合せで使用されます。2回実行するとパフォーマンス上問題がある、負荷の高い問合せの場合、回避策として、行を返さないダミーのWHERE句を使用してまずビュー・オブジェクトを作成し、そのビュー・オブジェクトに対してメタデータ問合せと属性定義を容易にするgetAttributeCount()
をコールし、次にsetQuery()
をコールして、必要に応じて問合せを変更します。このようにすると、最初の問合せは、同じデータセットに対する単純で負荷の高くない問合せになります。
コードでのビュー・オブジェクトのメンバーの作成と検索の方法
データ・モデルにあるビュー・オブジェクトのメンバーの検索
データ・モデルへの事前定義済ビュー・オブジェクトの慣用名の追加
問合せ句からのビュー・オブジェクトの作成