0

由于结果集的大小,我需要在作业中使用 HibernateCursorItemReader,但我无法使其与 EntityGraph 一起工作以急切地获取一些关系。我正在使用 QueryProvider。

没有任何 EntityGraph 就不会发生连接,并且读取器可以正常工作,但是在批处理期间,Hibernate 会执行大量 SQL 查询以延迟获取数据。这导致处理非常缓慢。

使用查询提示来获取它,任务在此时冻结Loader.class

ResultSet rs = session.getJdbcCoordinator().getResultSetReturn().extract( st );

上面的代码在doOpenHibernateCursorItemReader 的方法中调用,在第一个项目之前。没有错误,没有堆栈跟踪,几分钟内什么也没有,直到我停止 JVM。

我现在正在使用 HibernatePagingItemReader,使用相同的 QueryProvider 并提示急切地获取数据。但是在使用集合获取实体时分页效率不高,JVM 经常会出现内存不足的情况。

抱歉缺少示例代码,但我所拥有的是提到的类的默认配置和实现,没有什么具体可展示的。我认为光标阅读器是解决方案,但它如何与 EntityGraph 一起使用?

编辑 1

EntityGraph 和 HibernateCursorItemReader 一起使用似乎没有问题。耐心等待更多时间,处理开始了。它只是比平常慢,但是休眠的光标阅读器的工作方式与分页阅读器相同,获取所有实体图。

4

1 回答 1

0

EntityGraph 和 HibernateCursorItemReader 一起使用似乎没有问题。耐心等待更多时间,处理开始了。它只是比平常慢,但是休眠的光标阅读器的工作方式与分页阅读器相同,获取所有实体图。

于 2020-06-08T17:41:04.513 回答