- PR -

Hibernateで大容量の行数の処理はできますか?

1
投稿者投稿内容
ひろひろ
常連さん
会議室デビュー日: 2004/07/23
投稿数: 36
投稿日時: 2005-10-22 22:35
いつもお世話になっております。

Hibernate初心者です。使い始めて半月くらいです。

今、大容量のDBデータからデータを検索し処理を行うというプログラムを
Hibernate3.0.4を使用して作成しています。(データ量は50万件くらい。ログです。)

その中で、
コード:
Query query = getLogSearchQuery();
query.list();
// このあと、結果に対して処理する


※getLogSearchQuery()内でログを検索するHQLを記述しQueryオブジェクトを生成しています。

という処理を行う部分があるのですが、「OutOfMemoryError」が発生してしまいます。
50万件のうち30万件ほどヒットするのですが、検索結果を全部メモリ上に上げようとして
エラーが発生するようです。


そこで、質問なのですが、Hibernateでは「ResultSet」のような考え方はできないのでしょうか?
検索結果を全てメモリ上に上げるのではなく
コード:
while ( rs.next() ) {
    // このあと、rsに対して処理する
}


という風にすれば可能であると考えます。


なにか良い知恵はありますでしょうか?一通りのサイトは探してみたのですが
そのような記述がありませんでした。

ご教授ください。よろしくお願いします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-10-23 00:23
引用:

ひろひろさんの書き込み (2005-10-22 22:35) より:
そこで、質問なのですが、Hibernateでは「ResultSet」のような考え方はできないのでしょうか?



ありますよ。
org.hibernate.Query#scroll()がまさにそれです。
使い方もResultSetと似てるので説明は不要でしょう。
ひろひろ
常連さん
会議室デビュー日: 2004/07/23
投稿数: 36
投稿日時: 2005-10-23 10:35
あしゅさん、返答ありがとうございます。

確かにAPIドキュメントにも
Return the query results as ScrollableResults. The scrollability of the returned results depends upon JDBC driver support for scrollable ResultSets.
と書いてありました。。。
これで解決しそうです。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)