使用HibernatePagingItemReader作为自定义阅读器时出现问题

时间:2017-10-24 13:10:15

标签: java spring hibernate spring-batch

每次检索相同的记录,但我希望从阅读器中读取下一个项目。

@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();
}

2 个答案:

答案 0 :(得分: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();
    }

}

答案 1 :(得分:0)

问题是应用程序获取了如此多的reader对象实例而没有关闭它们的位置。从中获取数据后关闭HibernatePagingItemReader解决了这个问题。

reader.close();