2017-10-24 2 views
-1

同じレコードが毎回取得されていますが、次のアイテムをリーダーから読み込む予定です。HibernatePagingItemReaderをカスタムリーダーとして使用しているときに問題が発生する

@Override 
public MyObject read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {   
    HibernatePagingItemReader<MyObject> reader = new HibernatePagingItemReader<>(); 

    reader.setSessionFactory(taskOracleSessionFactory); 
    reader.setQueryString("select t from MyObject t "); 
    reader.setPageSize(1); 
    reader.setFetchSize(10); 
    return reader.read(); 
} 
+0

緊急の助けが必要です。 –

+0

ご質問はありますか?どのようなエラーが出ますか? – bkausbk

答えて

2

何かを読む必要があるたびにこのメソッドを呼び出すと、すべてのメソッド呼び出しでリーダーを再作成するので、常に同じ結果になります。

あなたの読者を作成する必要がありますし、この方法は、その後、別のレコードを、次のコードのようなもので

public void setup() { 
    HibernatePagingItemReader<MyObject> reader = new 
    HibernatePagingItemReader<>(); 

    reader.setSessionFactory(taskOracleSessionFactory); 
    reader.setQueryString("select t from MyObject t "); 
    reader.setPageSize(1); 
    reader.setFetchSize(10); 
} 

@Override 
public MyObject read() throws Exception, UnexpectedInputException, 
    ParseException, NonTransientResourceException { 
     return reader.read(); 
    } 

}

+0

私は提案されたものを試しました。今度は次のアイテムを返す読者ですが、毎回すべてのレコードを取得するため、パフォーマンスは非常に遅いです。私のアプリケーションでは、DBから取得するのに非常に時間がかかる非常に多くのレコードがあります。フェッチサイズとページサイズを使用して最適化しようとしています。 Plsはレコードを一括して取得し、Reader-Processor-Writerサイクルを完了させるための正確で最良の解決策を提案します。この時点で非常に役に立ちます。 –

+0

一度に1つのレコードを読み込むため、このジョブが遅い –

0

問題は、アプリケーションがのように多くのインスタンスを取得するということでしたたびに返すことができます読者のオブジェクトと、どこで閉じているのかはわかりません。そこからデータを取得した後にHibernatePagingItemReaderを閉じて解決しました。

reader.close(); 
関連する問題