java - 来自 Spring JPA 的 Iterable 结果的 Spliterators 是否可以安全地在 parallelStream 中使用
问题描述
类似于OneToMany 集合上的并行流是否安全?但我的问题特定于 Spring JPA Repository 查询的结果,例如
public interface Students extends JpaRepository<Student, UUID> {
@EntityGraph("Student.withProgramAndSchedule")
@Query("from Student s")
Iterable<Student> findAllWithProgramAndSchedule();
}
我可以安全地并行使用它吗?例如
StreamSupport.stream(students.findAllWithProgramAndSchedule().spliterator(), true)
解决方案
JPA 实体管理器及其管理的实体不是线程安全的。
考虑它的一种方法是students.findAllWithProgramAndSchedule()
可能会触发延迟加载。在后台,这将使用本身不是线程安全的 JDBC 连接,因此students.findAllWithProgramAndSchedule()
不能是线程安全的。
推荐阅读
- html - 当我调整屏幕大小时,如何让盒子相互包裹?(弹性盒)
- arrays - 为什么 scipy.optimize.curve_fit 需要多个数组作为输入?
- html - 如何使用 box-decoration-break 填充背景颜色直到行尾?
- flutter - Flutter Charts 使用 FutureBuilder 和 labelAccessorFn
- android - 为什么通过intent on android打开谷歌地图会产生与搜索框不同的结果?
- r - R中的随机+分层抽样
- java - RectangleViewer:找不到符号
- bluetooth - BLE GATT - 查看“模式”的最简单方法是什么?
- c# - 为什么我的windows服务在电脑重启后停止了?
- powershell - 在一个会话中以 32 位执行部分代码,而从 64 位 power-shell 执行另一部分代码