部門20を表すDepartmentImpl
クラスのgetEmployees
など、エンティティ・オブジェクトのAssociationアクセッサ・メソッドをコールすると、その部門の従業員のEmployeeImpl
オブジェクトのセットに対するRowIterator
が返されます。データベースの問合せによって、部門20に関連付けられている従業員インスタンスのエンティティ・オブジェクト行セットが作成されるため、部門20を割り当てられている既存の従業員は、関連エンティティ・オブジェクト行セットに常に含まれます。
現行のセッションで、新規Employeeエンティティ・オブジェクトを作成したり、既存Employeeエンティティ・オブジェクトを変更するとします。デフォルトでは、新規Employeeエンティティ・オブジェクトおよび変更されたEmployeeエンティティ・オブジェクトは、ポストまたはコミットされないかぎり、同じセッションでこの後、同一Departmentエンティティ・オブジェクトのgetEmployees
をコールしても、返されるエンティティ・オブジェクト行セットにこれらのエンティティ・オブジェクトは含まれません。データベースにすでに反映されている、既存の問合せ済エンティティ・オブジェクトに加え、新規エンティティ・オブジェクトおよび変更されたエンティティ・オブジェクトを含み、キャッシュと整合性のとれたエンティティ・オブジェクト行セットを提供するために必要な特別な記録処理をビジネス・ロジック層で行うには、完全なEntityRowSet整合モードで実行する必要があります。
これには、次の2つの方法があります。
アプリケーションのAssociationアクセッサ・メソッドで作成された、すべてのエンティティ・オブジェクト行セットに、ポストしていない新規エンティティおよび変更されたエンティティを常に含めるには、ランタイム・コマンドラインで次のJVMパラメータを入力します。
-Djbo.entityrowset.mode="NEW_AND_MODIFIED"
関連エンティティ・オブジェクトのビューとキャッシュとの整合性をとるために発生するオーバーヘッドが特定の行セットにしか発生しないようにするには、その行セットについてのみ次のメソッドをコールします。
yourRowset.setAssociationConsistent(true);