Hibernate の名前付きクエリを使用して、非常に大きなデータセット (200 万行以上) を返すストアド プロシージャを実行しています。DB は Oracle 11g です。
例えば:
Query query = session.getNamedQuery(procName);
hibernate のドキュメントからわかるように、 http: //docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html に記載されているように setFirstResult/setMaxResult を使用することはできません。
100,000 行のような小さなデータセットでは、すべて問題ありません。ただし、1,000,000 でテストするとすぐに OutOfMemory エラーが発生します。
query オブジェクトから、listIterator を取得します。データは 1 回だけフェッチされたと仮定し、listiterator ( query.list().listIterator()
)を反復処理します。
第 2 レベルのキャッシュが構成されていません。これらの設定は、Oracle ストアド プロシージャを扱うときに役立ちますか。
query.setCacheMode(org.hibernate.CacheMode.IGNORE);
query.setFetchSize(1000);
query.scroll(org.hibernate.ScrollMode.FORWARD_ONLY);
基本的に、Hibernate でストアド プロシージャを使用して大規模なデータセットの取得を管理するにはどうすればよいですか。
百万の感謝