gpt4 book ai didi

java - 使用 JPA EntityManager 批量插入

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:44 31 4
gpt4 key购买 nike

有没有一种方法可以让我们使用 JPA EntityManager 进行批量插入。我知道没有直接的方法可以实现这一点,但必须有某种方法来实现这种机制。

实际上,对于每个插入操作,它需要 300 毫秒,我希望使用批量插入而不是单个插入来减少该时间。

这是我当前正在执行的单个插入的代码

        @PersistenceContext(unitName = "testing")
EntityManager eM;

Query querys = this.eM.createNativeQuery(insertQuery);
for (String s : someList) {
//setting parameters
querys.executeUpdate();
}

提前致谢。

最佳答案

根据事务是否包含循环,批处理通常已经在您的情况下发生。

JPA 将在其 L1 缓存中收集所有更新,并且通常在事务提交时将所有更新批量写入数据库。这与 JDBC 中的批处理并没有什么不同,您添加的每个批处理项也会暂时存储在内存中,直到您调用更新方法。

潜在的问题是,您没有硬性保证 JPA 确实会执行此批处理,并且是否在事务提交时或达到阈值时执行此批处理,但我发现在实践中,在几乎所有情况下,尤其是在涉及如此简单的更新循环的情况下,它确实会执行批处理。

一个问题是,即使 JPA 确实已经进行了批处理,您仍然可能想要控制批处理大小。其他答案链接的文章为此提供了非常有用的信息。

最后,您应该意识到您的 L1 缓存会不断循环增长,因此如果更新数量确实很大,请定期清除它。或者,如果您的业务逻辑可以维持它,请在多个事务中进行部分更新。例如。交易 1 中的项目 0 到 100.000,交易 2 中的 100.001 到 200.000,等等。

关于java - 使用 JPA EntityManager 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107415/

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