gpt4 book ai didi

spring - 使用@Transactional 批注批量插入

转载 作者:行者123 更新时间:2023-12-01 06:09:44 25 4
gpt4 key购买 nike

在我的 spring 应用程序中,我想一次性在数据库中插入近 1500 条记录。我在后端使用 Spring 4.X 和普通的 hibernate 。在我的服务层中,我使用 @Transactional 注释。现在,在某个时间点后插入记录时,出现内存不足错误。在互联网上搜索后,我发现我们可以使用类似的东西

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}

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

但是,上面的代码他们手动使用 sessionFactory 和事务,并在 session 对象上使用刷新和清除,并手动提交。

在我的情况下,我不想使用上面的代码,我想使用 @Transactional 注释来完成这项工作。

请建议

我不想手动使用 session 工厂和事务对象。 ....@transactional 应该做这一切

最佳答案

如果您想从 BMT(Bean 管理事务)更改为 CMT(容器事务管理),您的代码片段将变为:

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void saveCustomers(){
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
}
}

当方法结束时,容器将刷新所有实体。现在我想问你,为什么你需要每 20 个实体?

关于spring - 使用@Transactional 批注批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33911741/

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