Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将HibernatePagingItemReader用作自定义读取器时遇到问题_Java_Spring_Hibernate_Spring Batch - Fatal编程技术网

Java 将HibernatePagingItemReader用作自定义读取器时遇到问题

Java 将HibernatePagingItemReader用作自定义读取器时遇到问题,java,spring,hibernate,spring-batch,Java,Spring,Hibernate,Spring Batch,每次都会检索到相同的记录,但我希望从阅读器中读取下一项 @Override public MyObject read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException { HibernatePagingItemReader<MyObject> reader = new 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();
}
@覆盖
public MyObject read()引发异常、UnexpectedInputException、ParseException、NontTransientResourceException{
HibernatePagingItemReader=新的HibernatePagingItemReader();
reader.setSessionFactory(taskOracleSessionFactory);
reader.setQueryString(“从MyObject t中选择t”);
设置页面大小(1);
读卡器.setFetchSize(10);
返回reader.read();
}

如果每次需要读取某个内容时都调用此方法,则始终会得到相同的结果,因为每次方法调用都会创建读取器

必须创建读卡器,然后每次不同的记录返回该方法,代码如下

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();
    }
公共作废设置(){
HibernatePagingItemReader=新建
HibernatePagingItemReader();
reader.setSessionFactory(taskOracleSessionFactory);
reader.setQueryString(“从MyObject t中选择t”);
设置页面大小(1);
读卡器.setFetchSize(10);
}
@凌驾
public MyObject read()引发异常,未预料到的PutException,
ParseException,非TransientResourceException{
返回reader.read();
}

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

reader.close();

需要紧急帮助你的问题是什么?你会遇到什么错误?我尝试了建议的方法。现在reader返回下一项,但性能非常慢,因为它每次都会获取所有记录。我的应用程序有大量的记录,需要很长时间才能从数据库中获取。尝试通过使用fetch Size和page Size来优化此设置。请提出准确/最佳的解决方案,以批量获取记录并完成读-处理-写入周期。在这一点上,这将是非常有帮助的。我想这项工作是缓慢的,因为你一次读一条记录