首页 > 解决方案 > Hibernate 读取和更新大数据

问题描述

我需要从表中读取大数据并更新它。

什么是最好的解决方案?

我使用流,但它有问题

Caused by: java.sql.SQLException: Streaming result set com.mysql.cj.protocol.a.result.ResultsetRowsStreaming@3ea407e4 is still active.

当任何流结果集打开并在给定连接上使用时,不得发出任何语句。确保.close()在尝试更多查询之前调用了任何活动的流式处理结果集。我的代码如下:

Stream<UserNotificationDTO> dtoStream = userNotificationRepo.fetchAllUnreadByUserId(userId);
        dtoStream.forEach(userNotifyDTO -> {
            userNotifyDTO.setOpened(true);
            userNotificationRepo.save(userNotifyDTO);
        });

标签: javaspringhibernate

解决方案


这是mysql的限制。迭代结果时不能发出其他查询:

在 MySQL 中使用大型结果集时,有许多记录在案的限制……这些限制的最终结果是,您必须先读取结果集的所有行(或关闭连接),然后才能发出任何其他连接上的查询,否则将抛出异常

来源: http: //openjpa.apache.org/builds/2.4.2/apache-openjpa/docs/dbsupport_mysql.html


推荐阅读