在我的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和事务,并在会话对象上使用flush和clear,并进行手动提交。
在我的情况下,我不想使用上面的代码,我想使用@Transactional注释来使这项工作。
请建议
我不想手动使用会话工厂和事务对象。 .... @ transactional应该全部完成
答案 0 :(得分:0)
如果您想从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个实体?