通过 Spring 在并行流中使用 JPA 对象

2024-01-07

我正在使用 JPA 开发 spring-boot 应用程序。在代码中,我发现一个非常可疑的部分,它执行类似的操作(简化的示例,代码否则包含很多混乱):

entityRepository.findAll().parallel() // The findAll returns already a stream, it's a CrudRepository from Spring
   .filter (...)
   .map(e -> {
      OtherDbObject other = service.getOtherDbObjectBasedOn(e);
      boolean hasSomething = other.getProperties().stream() //properties is fetch type EAGER @OneToMany collection in OtherDbObject
        .filter(...)
        .findFirst()
        .isPresent();

      ...
   })

看来parallel造成了很多麻烦,包括以下错误:

jvm 1    | org.hibernate.AssertionFailure: bug adding collection twice
jvm 1    |      at org.hibernate.engine.internal.StatefulPersistenceContext.addCollection(StatefulPersistenceContext.java:857)
jvm 1    |      at org.hibernate.engine.internal.StatefulPersistenceContext.addInitializedCollection(StatefulPersistenceContext.java:896)
jvm 1    |      at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:242)
jvm 1    |      at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:221)
jvm 1    |      at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:194)
jvm 1    |      at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:154)
jvm 1    |      at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:249)
jvm 1    |      at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:212)
jvm 1    |      at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:133)
jvm 1    |      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)
jvm 1    |      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
jvm 1    |      at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:88)
jvm 1    |      at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:688)
jvm 1    |      at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75)
jvm 1    |      at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1991)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:570)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:252)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:739)
jvm 1    |      at org.hibernate.engine.internal.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:924)
jvm 1    |      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:149)
jvm 1    |      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
jvm 1    |      at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:88)
jvm 1    |      at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:688)
jvm 1    |      at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75)
jvm 1    |      at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1991)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:570)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:252)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
jvm 1    |      at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:135)
jvm 1    |      at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:277)
jvm 1    |      at java.util.Spliterators$IteratorSpliterator.estimateSize(Spliterators.java:1821)
jvm 1    |      at java.util.Spliterator.getExactSizeIfKnown(Spliterator.java:408)
jvm 1    |      at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:497)
jvm 1    |      at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
jvm 1    |      at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
jvm 1    |      at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
jvm 1    |      at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
jvm 1    |      at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
...

我想说,做一些与数据库相关的事情至少是可疑的parallel流,但我没有任何证据表明应该避免它。

如果您能帮助解释错误或找到确凿的证据来证明内部带有 JPA 的并行流是不安全的,我将不胜感激。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Spring 在并行流中使用 JPA 对象 的相关文章

  • Ant 中回显目标描述

  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • 外部实体更改后索引不更新

    我目前正在开发一个项目 使用 JPA 2 1 保存数据并使用 hibernate search 4 5 0 final 搜索实体 映射类和索引后 搜索工作正常 但是 当我更改值时描述B 类从 someStr 到 anotherStr 数据库
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • 如何将测试类打包到jar中而不运行它们?

    我正在努力将我的测试类包含到 jar 包中 但不运行它们 经过一番谷歌搜索后 我尝试过mvn package DskipTests 但我的测试类根本没有添加到 jar 中 有任何想法吗 如果您遵循 Maven 约定 那么您的测试类位于src
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • Java 常量枚举[重复]

    这个问题在这里已经有答案了 可能的重复 理解 Java 中的枚举 https stackoverflow com questions 1419835 understanding enums in java 为什么我们应该使用枚举而不是 Ja
  • SDK尚未初始化,请务必先调用FacebookSdk.sdkInitialize()

    我在实现 Facebook SDK 时遇到此错误 并且我tried https stackoverflow com questions 15490399 error inflating class com facebook widget l
  • 如何在启用嵌入时间戳和 LTV 的情况下签署 PDF?

    我正在尝试签署启用了时间戳和 LTV 的 pdf 以便它在 Adob e Reader 中显示如下 在英语中 这意味着 签名包含嵌入的时间戳 和 签名启用了 LTV 这是我正在使用的代码 PrivateKey pk get pk from
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 一个类中有多个具有相同参数类型的方法

    我知道 至少已经有了关于这个主题的一个问题 https stackoverflow com questions 5561436 can two java methods have same name with different retur
  • 在java中使用@Filter hibernate注解过滤集合

    我有两个休眠映射实体 A 和 B A 有 2 个实体 B 的集合 我想根据 B 中保存的属性过滤每个集合 如下面的代码所示 FilterDefs class A OneToMany mappedBy productType fetch Fe
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 如何让JComboBox中的内容居中显示?

    目前我有这个JComboBox 我怎样才能将其中的内容居中 String strs new String 15158133110 15158133124 15158133458 JComboBox com new JComboBox str

随机推荐

  • 如何将 Breeze 与通用工作单元和存储库一起使用?

    使用这个 https genericunitofworkandrepositories codeplex com https genericunitofworkandrepositories codeplex com 以及以下一组博客文章
  • UI文本字段密码

    我知道可以使用以下命令使 UITextfield 在密码模式下运行 textfield secureTextEntry YES 这会将用户输入的所有字符更改为 然而 最后输入的字符会闪烁大约半秒 我知道这是标准行为 有什么方法可以阻止这种情
  • 如何从另一个网站“抓取”内容

    有朋友问过我这个问题 我无法回答 他问道 我正在制作这个网站 您可以在其中存档您的网站 它的工作原理是这样的 您输入您的网站 例如 something com 然后我们的网站抓取该网站上的内容 例如图像等 并将其上传到我们的网站 这样 即使
  • 如何反编译正则表达式?

    有没有办法在编译后反编译正则表达式 编译后的正则表达式对象有一个 pattern 属性 它给出原始文本模式 gt gt gt import re gt gt gt regex re compile foo bar gt gt gt rege
  • 在 Codeigniter 2 中扩展多个模型

    如何设置 CI2 以允许扩展多个模型 我只能让它扩展一个名为的模型 放入 application core MY Model 区分大小写 选择我正在做的扩展模型 在模型 require once APPPATH core MY Anothe
  • 如何在 Scala 中获取用户的输入?

    我想接受用户的输入 你能告诉我如何在 Scala 中以字符串形式请求用户输入吗 在 Scala 2 11 中使用 scala io StdIn readLine 而不是已弃用的Console readLine
  • 如何在没有调试符号和优化的情况下创建 cmake 构建配置?

    我认为默认配置类型可以这样描述 Debug w debug symbols w o optimization Release w o debug symbols w optimization RelWithDebInfo w debug s
  • 如何将 d3.js 示例嵌入到 Jekyll 博客文章中?

    我正在尝试这个 Jekyll 主题http richbray me frap http richbray me frap 我想创建一篇博客文章来展示这个 D3 js 示例 http bl ocks org mbostock 4061502
  • Django:如何在管理表单中获取当前用户?

    在姜戈的ModelAdmin 我需要显示根据用户拥有的权限定制的表单 有没有办法将当前用户对象放入表单类中 以便我可以在其中自定义表单 init method 我认为将当前请求保存在本地线程中是可能的 但这将是我的最后手段 因为我认为这是一
  • 为什么内存警告为 4 MB 利用率和 320 MB 可用空间?

    我正在运行附加到 Xcode 5 1 1 的 iOS 7 1 的 iPhone 4 上进行测试 我不明白为什么当仪器显示我的应用程序仅使用几兆字节并且有大量可用内存时 我会收到内存警告甚至崩溃 请参阅附件 有任何想法吗 Update 正如我
  • 从 Excel 工作表获取数据

    如何将 Excel 工作表中的数据加载到 Django 应用程序中 我使用数据库 PosgreSQL 作为数据库 我想以编程方式执行此操作 客户希望每周将两个不同的列表加载到网站上 但他们不想在管理部分中执行此操作 他们只想从 Excel
  • 在此范围内未声明“pthread_setname_np”

    我在我的应用程序中创建了多个线程 我想为每个 pthread 分配一个名称 所以我使用pthread setname np它可以在 Ubuntu 上运行 但不能在 SUSE Linux 上运行 我用 google 搜索了一下 发现 np 的
  • Intellij IDEA 未检测到更改

    昨天 我重构了我的项目 并更改了包的布局 我将一些包移动到另一个包中 创建了新包等 但现在 当我尝试运行 JUnit 测试时 我得到了NoSuchMethodError重构后名称更改的方法 另外 当我更改方法中的其他代码时 IDEA 仍然运
  • 无法找到 com.facebook.katana.provider.platformprovider 和 com.facebook.wakizashi.provider.platformprovider 的提供商信息

    在我的 Android 应用程序中 我使用 FacebookDialog 我正在写下以下代码 在 Galaxy Note 3 Android 4 4 2 中 一切顺利 然而 在Experia SOL21 Android4 1 2 中却没有
  • 恢复 SQL Server 数据库之前等待连接关闭

    我有一个使用两个数据库的网络应用程序 DB1 用户执行 CRUD 创建 读取 更新 删除 操作 数据库 DB2 是位于另一台服务器上的只读数据库 我将其用于报告目的 我的 DB1 每小时都会保存事务日志 而在 DB2 上 我有一项工作需要在
  • 使用 RESTful URL 能给我带来什么?

    我一直在阅读有关 REST 的内容 并试图找出使用它的优势是什么 具体来说 REST 样式的 URL 相比于带有查询字符串的更典型的 GET 请求有什么优势 值得实现 为什么是这个网址 http www parts depot com pa
  • 减少 HTML

    我的网页中有以下 HTML Forum ul li Stack li li OverFlow li ul 正如您在下面看到的 我完美地列出了项目 但是之间存在固定的差距 ul and li 元素 有什么办法可以缩小这个差距吗 即附加屏幕中
  • 广度优先搜索:找不到路径,二维数组中到边界的最短路径

    我尝试编写一个 绕点 游戏 基本的游戏理念是 你必须在蓝点逃脱之前包围它 每放置一个障碍物 橙色点 蓝色点 玩家 就会向边界移动一步 如果你在他到达边界之前没有圈出蓝点 那么你就输了 游戏将重新开始 因此我必须做一个对 UIButton 的
  • 重命名二维数组每行中的键

    在如下所示的数组中 如何将 fee id 重命名为 id 输入数组 fee id gt 15 fee amount gt 308 5 year gt 2009 fee id gt 14 fee amount gt 308 5 year gt
  • 通过 Spring 在并行流中使用 JPA 对象

    我正在使用 JPA 开发 spring boot 应用程序 在代码中 我发现一个非常可疑的部分 它执行类似的操作 简化的示例 代码否则包含很多混乱 entityRepository findAll parallel The findAll