gpt4 book ai didi

java - JPA 2.0 : How to improve performance on bulk insertion through JPA

转载 作者:行者123 更新时间:2023-11-30 06:13:15 25 4
gpt4 key购买 nike

例子:

我有三个表:location,department,employee

现在假设位置和部门是已经具有完整数据的主表。现在我需要通过 JPA 插入 1000 名员工列表。我也与 Employee 表中的 Location 和 department 有关系。

所以现在要在 Employee 中插入条目,就像我正在做的那样:

for loop...1000
Employee e = new Employee();
e.setId(12);
e.setEmpname("ABC");
Location l = null;
l = em.find(Location.class, 234);
e.setLocation(l);
Department d = null;
d = em.find(Department.class, 111);
e.setDepartment(d);
em.persist(e);
loop ends...

将数据加载到数据库中需要一些时间。这是通过 JPA 插入数据的唯一方法吗,因为它会降低性能。我不想使用 native 查询。请建议是否有人有更好的方法来提高效率。

最佳答案

JPA 2.0 不提供对批量插入的特定支持。保持 JPA 习惯用法,您可以这样做:

EntityManager em = ...;
EntityTransaction tx = em.getTransaction();
tx.begin();

for (int i = 0; i < 100000; i++) {
Employee e = new Employee();
// setup entity
em.persist(e);
if ((i > 0) && (i % 20 == 0)) { // Flush in batches of 20 to keep caches from bogging.
em.flush();
em.clear();
}
}

tx.commit();
session.close();

或者,您可以使用 em.createNativeQuery() 并触发原生 SQL 批量插入。

根据您使用的特定数据库和 ORM,还有其他几种可能性。例如,EclipseLink ( http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html ) 或参数化 ( http://java-persistence-performance.blogspot.com/2013/05/batch-writing-and-dynamic-vs.html ) 有技巧。

可在此处找到特定于 Hibernate 的演练:http://korhner.github.io/hibernate/hibernate-performance-traps-part-2/

关于java - JPA 2.0 : How to improve performance on bulk insertion through JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32066898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com