gpt4 book ai didi

java - Hibernate/MySQL 批量插入问题

转载 作者:可可西里 更新时间:2023-11-01 06:59:18 26 4
gpt4 key购买 nike

我无法让 Hibernate 在 MySQL 上执行批量插入。

我正在使用 Hibernate 3.3 和 MySQL 5.1

在高层次上,这就是正在发生的事情:

@Transactional
public Set<Long> doUpdate(Project project, IRepository externalSource) {
List<IEntity> entities = externalSource.loadEntites();
buildEntities(entities, project);
persistEntities(project);
}
public void persistEntities(Project project) {
projectDAO.update(project);
}

这会产生 n 个日志条目(每行 1 个),如下所示:

Hibernate: insert into ProjectEntity (name, parent_id, path, project_id, state, type) values (?, ?, ?, ?, ?, ?)

我希望看到它被分批处理,这样更新的性能会更高。此例程可能会导致生成数万行,并且每行一次数据库访问是致命的。

为什么不进行批处理? (据我了解,在适当的情况下,hibernate 应该默认批量插入)。

最佳答案

Pascal 的回答是正确的。但是,由于您使用的是 MySQL,我也强烈建议您尝试在 JDBC URL 中使用 rewriteBatchedStatements=true 参数。

此参数导致 JDBC 驱动程序动态重写您的 INSERT 批处理以使用单个“多值”INSERT,例如:

INSERT INTO mytable (mycol) VALUES (0);
INSERT INTO mytable (mycol) VALUES (1);
INSERT INTO mytable (mycol) VALUES (2);

将被重写为:

INSERT INTO mytable (mycol) VALUES (0), VALUES (1), VALUES (2);

在某些情况下,这可能会产生重大影响。参见 http://www.jroller.com/mmatthews/entry/speeding_up_batch_inserts_for对于一些示例测量。

关于java - Hibernate/MySQL 批量插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303152/

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