30.8.4. 遅延ローディングの結果セット
デフォルトでは、マルチオブジェクトの finder または select メソッドが実行されると、JDBC 結果セットがすぐさま最後まで読み込まれます。クライアントは、
EJBLocalObject
または CMP フィールド値のコレクションを受け取り、この後それを反復することができます。結果セットが大きい場合は、この方法は効率的ではありません。場合によっては、クライアントがコレクションから対応する値の読み込みを試行するまでは、結果セットにある次の行の読み込みを遅らせるほうがよい場合があります。lazy-resultset-loading
要素を使用することで、クエリーに対するこの動作を起こさせることができます。
<query>
<query-method>
<method-name>findAll</method-name>
</query-method>
<jboss-ql><![CDATA[select object(o) from A o]]></jboss-ql>
<lazy-resultset-loading>true</lazy-resultset-loading>
</query>
遅延ローディングの結果セットを使用する場合に気をつけなければならないことがいくつかあります。遅延ローディングされた結果セットに関連付けられた
Collection
を扱う場合には、特別な注意が必要です。iterator()
への最初の呼び出しによって、ResultSet
から読み込むという特別な Iterator
を返します。この Iterator
が使い果たされるまで、その後の iterator()
に対する呼び出しや add()
メソッドに対する呼び出しは除外されます。remove()
および size()
メソッドはそのまま期待通りに機能します。