java - 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);
});
解决方案
这是mysql的限制。迭代结果时不能发出其他查询:
在 MySQL 中使用大型结果集时,有许多记录在案的限制……这些限制的最终结果是,您必须先读取结果集的所有行(或关闭连接),然后才能发出任何其他连接上的查询,否则将抛出异常
来源: http: //openjpa.apache.org/builds/2.4.2/apache-openjpa/docs/dbsupport_mysql.html
推荐阅读
- scipy - 集成时动态访问状态(python)
- c# - Asp .NET MVC 隐藏行并更新数据库值
- graphql - 从 CryptoCompare API 获取数据时,GraphQL 错误:“预期可迭代,但未找到用于字段查询的对象”
- python - 如何创建具有字符串变量类型的列表,然后在条件中使用该列表
- linux - 如何为默认参数设置编写 Shell 脚本
- xbee - 制作面包屑网络的 Xbee 地址问题
- java - 在 getter 中访问 point[] 方法
- regex - Vim 捕获组有一个不需要的空间
- javascript - 使用 JavaScript 爬取网站 -> 可能以及爬取的网站上显示的 IP
- python - 扁平化 JSON 重复列 Pandas