使用多线程的JPA持久化

2023-12-02

当我尝试使用持久化对象时遇到问题多线程.

细节 :

假设我有一个对象PaymentOrder其中有一个列表PaymentGroup(一对多关系)和PaymentGroup包含一个列表CreditTransfer(再次是一对多关系)。

由于数量CreditTransfer是巨大的(十万),我根据PaymentGroup(基于一些业务逻辑) 并创造WORKER线程(每个 PaymentGroup 一个线程)形成PaymentOrder对象并提交到数据库中。

问题是,每个工作线程都创建一个PaymentOrder(其中包含一组独特的PaymentGroups).

所有实体的主键都是自动生成的。

所以有三个表,1. PAYMENT_ORDER_MASTER,2. PAYMENT_GROUPS,3. CREDIT_TRANSFERS,都是通过一对多关系映射的。

因此,当第二个线程尝试将其组保留在数据库中时,框架会尝试保留相同的组PaymentOrder,前一个线程提交了,由于一些其他唯一字段约束(校验和),事务失败PaymentOrder).

理想情况下它必须是 1..n..m (PaymentOrder->支付组-->学分转移`)

我需要实现的是如果没有条目PaymentOrder在数据库中输入一个条目,如果存在,则不要输入PAYMENT_ORDER_MASTER,但仅在PAYMENT_GROUPS and CREDIT_TRANSFERS.

如何克服这个问题,维护 split-master- payment-order-using-groups 逻辑和多线程?


你有选择。
1)原始但简单,在最后捕获关键违规错误并在没有父母的情况下重试插入。假设你的父母确实是独一无二的,你知道另一个线程只是让父母……继续照顾孩子。与其他选项相比,这可能表现不佳,但也许您会得到所需的流行。如果您有一个孩子的父母比例较高,那么效果会很好。

2) 更改读取一致性级别。它是特定于供应商的,但有时您可以读取未提交的事务。这将帮助您在提交之前查看其他线程的工作。这并不是万无一失的,你仍然必须执行#1,因为另一个线程可以在读取后潜入。但它可能会提高您的吞吐量,但代价是更加复杂。基于 RDBMS 可能是不可能的(或者也许它可能发生,但仅限于数据库级别,弄乱其他应用程序!)

3) 使用单线程消费者实现工作队列。如果程序的主要昂贵工作是在持久性级别之前,您可以让线程将其数据“插入”到工作队列中,其中不强制执行键。然后从工作队列中提取一个线程并保留。工作队列可以位于内存中、另一个表中或供应商特定的位置(Weblogic 队列、Oracle AQ 等)。如果程序的主要工作是在持久化之前,那么您可以并行化它并返回到插入上的单个线程。您甚至可以让您的消费者在“批量插入”模式下工作。亲爱的。

4)放松你的限制。谁真正关心同一个孩子的两个父母是否持有相同的信息?我只是问问。如果您以后不需要对家长信息进行超快速更新,并且可以更改阅读程序来理解它,那么它可以很好地工作。它不会让你在数据库设计课上获得“A”,但如果它有效......

5) 实现一个愚蠢的锁表。我讨厌这个解决方案,但它确实有效——让你的线程写下它正在父“x”上工作,而其他人不能,因为它是第一个事务(和提交)。通常会导致相同的问题(以及其他问题 - 稍后清理记录等),但在子插入速度慢而单行插入速度快时可以工作。仍然会发生碰撞,但会减少。

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

使用多线程的JPA持久化 的相关文章

  • CDI 对象无法使用注入的构造函数进行代理

    当尝试将参数注入 CDI bean ApplicationScoped 的构造函数时 我遇到以下问题 Caused by org jboss weld exceptions UnproxyableResolutionException WE
  • firebase android 基于类的更新不尊重字段名称的大小写

    我声明了以下类 注意大小写选择 public class User private String DisplayName private Boolean Proxy false SuppressWarnings unused public
  • CustomTaskChange 在调用 updateSQL 时实际执行

    我有一个CustomTaskChange在 Liquibase 中 除了其他变更集 我希望我的应用程序在实际执行之前显示所有 ChangeSet 的 SQL 以我的理解 updateSQL应该预览 SQL 并且不执行任何操作 ACustom
  • 整理有关 QueryDSL-JPA 的提示

    有没有办法用 QueryDSL 来执行它 粗体部分 从地点选择 其中名称如 cafe 整理 Latin1 general CI AI 我将 JPA 与 hibernate 一起使用 您可以使用addFlag QueryFlag Positi
  • AJAX(原型/java)在执行期间获取部分状态更新

    这部分模仿了AJAX 原型 php 在脚本执行期间获取部分状态更新 https stackoverflow com questions 800997 ajax prototype php getting partial status upd
  • Java RCP/SWT - Eclipse RCP 中的“Android Toast like”对话框

    有谁知道是否存在某些弹出窗口的实现 例如 Android TOAST 通知是以下内容的一部分迈林公共区 https projects eclipse org projects mylyn commons 要集成它们 请添加Mylyn Com
  • 在java中迭代日期

    我需要遍历一系列日期 不确定如何在 for 循环中获取第二天 我在用java util Date So plusDays 1 不能在 for 循环中用于获取下一个日期 Used date1 new Date date1 getTime 10
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • Eloquent/Laravel 三路多对多关系

    我对 Laravel 和 Eloquent 是全新的 而且我对 ORM 的经验也很少 假设我有三个数据库表 Widgets Actions Users 我建模了一个连接表 其中包含以下列 widget id action id user i
  • 结果显示图像上有衬里

    我正在使用 opencv 和 android ndk 下面是我的 jni 代码 void Vignete Mat img1 Mat img2 Mat out resize img1 img1 img2 size img1 convertTo
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • 具有 LINQ 支持的最完整的 ORM?

    我正在寻找一个提供完整或接近完整的 LINQ 支持的 ORM LINQ 到 SQL 支持 LINQ 内部的所有内容 Contains Math Log 等 在不创建新数据上下文的情况下无法预先加载关系属性 ADO NET 实体框架 糟糕的
  • 通过命令行增加Java中的MaxPermSize内存

    您能否解释一下如何增加此 PermSpace 大小 我正在使用 Gate 应用程序并加载大量数据和大量插件 不幸的是每次运行后都会出现有关内存不足 maxPermSpace 的错误 我到处搜索 但我找不到如何通过命令行增加这个大小 或者可能
  • ElasticSearch - 定义自定义字母顺序进行排序

    我正在使用 ElasticSearch 2 4 2 通过 Java 的 HibernateSearch 5 7 1 Final 我在字符串排序方面遇到问题 我的应用程序的语言有变音符号 它们有特定的字母顺序 订购 例如 直接在之后L 追随O
  • AWS Java SDK 中 DynamoDB v2 的迁移详细信息?

    有没有人对新的命名空间进行了更改 com amazonaws services dynamodbv2 以及 AWS Java SDK 1 4 2 及更高版本 中 DynamoDB 的接口 本地二级指数的发布显然需要根据1 4 2 发行说明
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 删除子类中的注释?

    我有一个子类 需要一个注释 在删除的父类中声明 做这个的最好方式是什么 public class Parent MyAnnoation String foobar public class Child extends Parent here
  • 为什么永久代空间不断增长?

    我读过几篇文章 我理解以下内容 如果我错了 请纠正我和 或编辑问题 java堆是这样分段的 年轻代 创建的对象放在这里 这部分被频繁且廉价地垃圾收集 老一代 在年轻代的垃圾收集中幸存下来的对象会移到此处 该区域的垃圾收集频率较低 并且使用对
  • Hibernate Envers:如何捕获谁删除了审计表中的实体

    我在用hibernate envers with spring 一切工作正常 除了当我删除一个实体时 它不会改变的值updated by and updated date在审计表内 它会在之后保存一个与之前完全相同的实体 仅复制 sprin

随机推荐

  • 另一个线性渐变内的线性渐变

    我正在尝试在另一个线性渐变中创建线性渐变 这可能吗 下面的例子 background linear gradient to right color1 50 color2 0 颜色 1 是 background linear gradient
  • ARM Aarch64 中的 PUSH {lr} 和 POP {lr}

    等效指令是什么PUSH lr and POP lr 在ARM Aarch64指令集中 Is STR X30 SP 8 正确的 您能解释一下维护堆栈对齐的概念吗 我对 ARMv8 比较陌生 所以请原谅 如果您要求 C 编译器从源代码生成汇编语
  • WIX 自定义操作:使用 dllimport

    我有一个 WiX 安装程序和自定义操作项目 我添加了 C 库作为自定义操作项目的参考 此 C dll 使用 DllImport 到一个 C dll 安装时收到错误 无法加载 DLLmycpp dll 未找到指定的模块 我添加了mycpp d
  • 为什么Fortran可以分配这么大的数组?

    我编写了一段科学代码 像往常一样 这归结为计算代数特征值方程中的系数 计算这些系数需要对多维数组进行积分 这会迅速大幅增加内存使用量 一旦计算出矩阵系数 就可以释放原始的预积分多维数组 并由智能求解器接管 因此内存使用不再是大问题 正如您所
  • 指定绘图上多条线的颜色[重复]

    这个问题在这里已经有答案了 Pandas 数据框分组图 我有一个与上述问题类似的数据框 但它有大约 8 个股票代码 我定义了一个名为 颜色 的颜色列表 与股票代码相对应 但是当我这样做时 df groupby ticker adj clos
  • 使用map-reduce构建分布式KD树

    我正在尝试使用map reduce 构建分布式KD 树 分布式KD树的描述可以在这里找到Dkd Tree I have a feature vector of images having dimension 20 I have to bui
  • 如何在powershell中的正则表达式中插入变量

    我试图查看文件中是否存在某些输入的条目 因此我使用正则表达式来查询每一行 cat file where match script fileName 其中 fileName 是其他地方定义的一些输入 如何更改正则表达式以插入变量而不是匹配 f
  • 空手道:[主要] INFO com.intuit.karate - karate.env 系统属性为:null [重复]

    这个问题在这里已经有答案了 在尝试使用生成的令牌执行下一个场景时 在令牌身份验证流程之后出现错误 主要 INFO com intuit karate 空手道系统属性为 null 我使用了以下代码 特征文件 Feature Login Tok
  • Python项目结构和相关导入

    我是Python新手 我在谷歌上搜索了很多 并阅读了一些有关相对导入等的文章 尽管事实上我无法让它工作 请考虑我的以下项目结构 Project docs log prev src a py tests tests1 b py tests2
  • 直接从无头图像字节数组创建缩略图

    我的应用程序一次显示大量图像缩略图 目前 我将所有全尺寸图像保留在内存中 并简单地在 UI 中缩放图像以创建缩略图 但是 我宁愿只在内存中保留小缩略图 并且仅在必要时加载全尺寸图像 我认为这很容易 但与仅在 UI 中缩放全尺寸图像相比 我生
  • 您的凭据不允许访问此资源 Twitter API 错误

    我正在研究 Twitter api 一些 api 得到了响应 但statuses home timeline jsonapi 和其他 api 没有得到响应 出现错误 errors code 220 message Your credenti
  • 从 AEM 下载包后如何在 Eclipse 中使用它

    我从包管理器中从正在运行的 AEM 实例下载了一个 zip http localhost 4502 crx packmgr index jsp 解压缩后的 zip 文件包含 jcr root and META INF 我想在此 zip 文件
  • 如何自动允许 IE 中阻止的内容?

    我使用下面的代码作为示例菜单
  • 水平和垂直滑动的动态视图

    请检查上面的视图 我必须相应地创建一个视图 当我们从左向右滑动时 图像将与从右向左滑动相同 当我从上到下滑动时 将会出现网络视图 并且从下到上滑动图像将会出现 所有数据 例如图像和网址 都是动态的 并且数据将来自服务器 我还必须在其中应用拉
  • JAXB 将循环引用映射到 XML

    我有一个包含循环的对象图 我如何让 JAXB 处理这个问题 我尝试使用 XmlTransient子类中的注释 但 JAXB 编组器仍然检测到循环 Entity XmlRootElement public class Contact Id p
  • 如何让函数执行得更快?

    我有以下功能 https i stack imgur com yXA67 png where mu是矩阵 n X 行和 n Y 列 d X 和 d Y 是距离矩阵 在 R 中实现此函数的一种方法是 H mu lt function mu d
  • jQuery.noConflict() 破坏插件

    我在 Rails 应用程序中同时使用 Prototype 和 jQuery 为了解决 冲突我执行以下操作 这大部分工作正常 但我正在尝试使用a plugin不喜欢它并抛出一个 is not a function type error 我能做
  • 为什么 Node.js 没有原生 DOM?

    当我发现这一点时Node js 使用 V8 JavaScript 引擎构建 我想 太好了 网页抓取会随着页面变得更容易 将像在浏览器中一样呈现 带有 支持 XPath 和任何 AJAX 调用的 本机 DOM 执行的页面 为什么它使用与 Ch
  • 使用 Android 拍照时出现问题(垂直相机 | 肖像)

    使用以下代码显示相机的垂直预览 它的工作原理 但 我得到一张风景照片 我如何垂直构建它 我有垂直预览视图 但无法垂直保存图片 问候和感谢 弗兰 ONCLICK public void onClick View arg0 camera tak
  • 使用多线程的JPA持久化

    当我尝试使用持久化对象时遇到问题多线程 细节 假设我有一个对象PaymentOrder其中有一个列表PaymentGroup 一对多关系 和PaymentGroup包含一个列表CreditTransfer 再次是一对多关系 由于数量Cred