便携式 JPA 批量/批量插入

2024-03-20

我刚刚开始使用其他人编写的一个功能,该功能似乎效率稍低,但我对 JPA 的了解并不足以找到非 Hibernate 特定的可移植解决方案。

简而言之,在循环中调用的 Dao 方法插入每个新实体会执行“entityManager.merge(object);”。

JPA 规范中是否定义了一种方法来将实体列表传递给 Dao 方法并进行批量插入,而不是为每个对象调用合并?

另外,由于 Dao 方法是用“@Transactional”注释的,我想知道是否每个合并调用都发生在它自己的事务中......这对性能没有帮助。

任何想法?


不,普通 JPA 中没有批量插入操作。

是的,每个插入都将在其自己的事务中完成。这@Transactional属性(没有限定符)意味着传播级别REQUIRED(如果交易尚不存在,则创建交易)。假设您有:

public class Dao {
  @Transactional
  public void insert(SomeEntity entity) {
    ...
  }
}

你做这个:

public class Batch {
  private Dao dao;

  @Transactional
  public void insert(List<SomeEntity> entities) {
    for (SomeEntity entity : entities) {
      dao.insert(entity);
    }
  }

  public void setDao(Dao dao) {
    this.dao = dao;
  }
}

这样,整个插入组就被包装在一个事务中。如果您正在谈论大量插入,您可能需要将其分成 1000 个、10000 个或任何大小的组,因为足够大的未提交事务可能会导致数据库资源匮乏,并且可能仅由于大小而失败。

Note: @Transactional是一个Spring注解。看交易管理 http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html来自Spring参考。

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

便携式 JPA 批量/批量插入 的相关文章

随机推荐

  • C# 数组是否保证在内存中顺序存储?

    根据互联网上的许多资料 在 C 中 数组是按顺序存储的 也就是说 如果我有一个指向数组中第一个元素的指针 比如说int start array 0 然后我可以访问array i 通过做 start i 但是 我正在查看存储在中的 C 语言规
  • 在Python中,使用bisect在字典列表中查找项目

    我有一个字典列表 如下所示 test data offset 0 data 1500 offset 1270 data 120 offset 2117 data 30 offset 4055 data 30000 字典项在列表中按照以下顺序
  • 将 MBean 从 JBoss 4.x 移植到 JBoss 7

    我们目前正在将一些项目从 JBoss 4 x 移植到 JBoss 7 到目前为止 一切似乎都工作正常 除了 MBean 之外 我们通常使用 MBean 来提供简单的管理操作 我已经搜索了很长一段时间 但要么我无法提出正确的搜索词 要么我缺少
  • 在使用“with”子句的查询中使用 Laravel 的 toSql

    我正在 Laravel 工作 我有兴趣检查由包含 with 语句的 Eloquent 查询生成的 SQL 语句 由于某种原因 我只得到主要查询 例如 当我跑步时 class Child extends EloquentVersioned p
  • jQuery 选择列表删除所有选项

    我有一个
  • 如何在iOS项目中使用dylib库和hpp头文件?

    我已经获得了一个 dylib 库和一个 hpp 头文件 我应该在 Xcode 中的 iOS 项目中使用它们 我一直在网上查找 但所有答案都很简洁 没有具体的步骤可遵循 我只需将这些文件复制到我的项目中吗 如何在 Obj C 类中创建 使用库
  • 如何估计线程上下文切换开销?

    我正在尝试通过实时截止日期来提高线程应用程序的性能 它运行在 Windows Mobile 上并用 C C 编写 我怀疑高频率的线程切换可能会导致有形的开销 但既不能证明也不能反驳它 众所周知 缺乏证据并不是相反的证明 因此我的问题是双重的
  • iPhone UITableView:如何删除组样式表中各部分之间的间距?

    我正在创建一个表格视图 其中有 10 个部分 所有部分都有标题视图 但没有单元格 所以 简而言之 我的表视图将仅显示 10 个标题视图 任何部分都不会有单元格 现在 当我这样做时 该部分的标题视图之间有一些空间 我想删除那个空格 那可能吗
  • 在 Flutter 中显示几秒钟后没有执行操作按钮时关闭 AlertDialog

    我有一个 AlertDialog 弹出几秒钟 然后自动弹出 没有执行任何操作按钮 弹出后 会显示另一个AlertDialog 我怎样才能做到这一点 这是我的示例代码 初始化计时器以显示第一个对话框 timerToShowFirstDialo
  • AVFoundation,在预览层中剪掉边缘

    我正在开发一些 iOS 应用程序 我需要在其中进行一些相机扫描 这是我第一次体验 AVFoundation 之前我使用 UIImagePickerController 开发相机应用程序 但 AVFoundation 似乎更强大 问题是它会切
  • 使用 doPost 将文件上传到 Google Web Apps

    我正在尝试使用 doPost e 将文件上传到 Google Web App 如下所示 function doPost e var blob e parameter myFile DriveApp createFile blob 然后将文件
  • Intel x86 与 AMD x86 CPU 上的访问性能不一致

    我已经实现了一个带有结构内存布局数组的简单线性探测哈希图 该结构包含键 值和指示条目是否有效的标志 默认情况下 该结构体由编译器填充 因为键和值是 64 位整数 但该条目仅占用 8 个布尔值 因此 我也尝试以未对齐访问为代价来打包结构 由于
  • 使用 pdfnet 下划线会导致不同的线条粗细

    我用来为所选文本添加下划线的代码 我开始调用 addUnderline 方法 其他方法是辅助方法 private pdftron SDF Obj CreateUnderlineAppearance pdftron PDF Rect bbox
  • Python 和 numpy:从 1 维数组中逐行减去 2 维数组

    在python中 我希望从1维数组中逐行减去2维数组 我知道如何使用 for 循环和索引来完成此操作 但我认为使用 numpy 函数可能会更快 但是我没有找到办法做到这一点 这是一个带有 for 循环的示例 from numpy impor
  • 文件 -> 在 MonoDevelop 中打开网站?

    我无法在 MonoDevelop 中打开现有网站 我尝试了各种选择但没有成功 有什么办法可以做到这一点吗 Visual Studio 有这个功能并且运行得很好 但我想在我当前的项目中尝试使用 MonoDevelop MonoDevelop
  • 在 Linux 中如何判断哪个进程向我的进程发送了信号

    我有一个java应用程序SIG TERM 我想知道发送这个信号的进程的pid 那可能吗 两种 Linux 特定的方法是SA SIGINFO http www kernel org doc man pages online pages man
  • 如何获得 TreeNodes 的 TreeView 行为,当您检查一个 TreeNodes 时,它会检查其所有子 TreeNodes?

    这与大多数应用程序的行为方式相同 我认为 TreeView 默认情况下是这样工作的 有没有办法做到这一点 或者我是否必须获取已检查的 TreeNode 的所有子节点并自己检查它们 这是winform 你需要自己做 但另一方面这并不难 pri
  • 块范围内没有链接?

    块中声明的所有变量是否都 无链接 例如 1 如果我声明一个静态变量 void foo static int i 它有内部联系还是没有联系 如果没有链接 那为什么要使其静态呢 2 如果我使用 extern 会发生什么 global scope
  • 检测迭代器是否会被消耗

    是否有一种统一的方法来知道迭代是否会消耗可迭代对象 假设你有一个特定的函数crunch它要求一个可迭代对象作为参数 并多次使用它 就像是 def crunch vals for v in vals chomp v for v in vals
  • 便携式 JPA 批量/批量插入

    我刚刚开始使用其他人编写的一个功能 该功能似乎效率稍低 但我对 JPA 的了解并不足以找到非 Hibernate 特定的可移植解决方案 简而言之 在循环中调用的 Dao 方法插入每个新实体会执行 entityManager merge ob