在我的 Spring 应用程序中,我想一次性在数据库中插入近 1500 条记录。我在后端使用 Spring 4.X 和普通休眠。在我的服务层中,我使用@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 和事务,并对会话对象使用刷新和清除,然后进行手动提交。
就我而言,我不想使用上面的代码,我想使用 @Transactional 注释来完成这项工作。
请建议
我不想手动使用会话工厂和事务对象。 ....@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个实体?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)