每次检索相同的记录,但我希望从阅读器中读取下一个项目。
@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 :(得分: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();