【问题标题】:HibernateCursorItemReader and EntityGraphHibernateCursorItemReader 和 EntityGraph
【发布时间】:2020-09-25 04:19:53
【问题描述】:

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

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

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

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

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

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

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

编辑 1

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

【问题讨论】:

  • 为什么不能使用HibernateCursorItemReader.setQueryStringHibernateCursorItemReader.setQueryName 而不是HibernateQueryProvider,然后在传递的HQL 中使用JOIN FETCH
  • 我的查询有 80 个连接,只是很难写,但我会试试看是否有效

标签: hibernate spring-batch entitygraph iqueryprovider


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2020-03-12
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多