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 的工作方式相同,获取所有实体图。
由于结果集的大小,我需要在 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 的工作方式相同,获取所有实体图。