HibernateCursorItemReader 和 EntityGraph

HibernateCursorItemReader and EntityGraph

由于结果集的大小,我需要在 Job 中使用 HibernateCursorItemReader,但我无法让它与 EntityGraph 一起使用来急切地获取一些关系。我正在使用 QueryProvider。

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

使用查询提示获取它,任务冻结在Loader.class的这一点:

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

上面的代码在 HibernateCursorItemReader 的 doOpen 方法期间调用,在第一个项目之前。没有错误,没有堆栈跟踪,只有几分钟什么都没有,直到我停止 JVM。

我现在正在使用 HibernatePagingItemReader,它具有相同的 QueryProvider 和提示以急切地获取数据。但是分页在获取带有集合的实体时效率不高,JVM经常内存不足。

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

编辑 1

EntityGraph和HibernateCursorItemReader放在一起好像没什么问题。耐心等待更多时间,处理开始。它只是比平时慢,但是 hibernate 的游标 reader 与分页 reader 的工作方式相同,获取所有实体图。

EntityGraph 和HibernateCursorItemReader 在一起好像没什么问题。耐心等待更多时间,处理开始。它只是比平时慢,但是 hibernate 的游标 reader 与分页 reader 的工作方式相同,获取所有实体图。