我正在使用一个使用Spring DAO + hibernate结构处理数据库的应用程序。
我想使用hibernate在oracle数据库中插入大量行(约20000行),但使用.save()非常慢。
我了解到使用StateLess会话可以做到这一点,但由于所有会话都是通过BaseDaoImp类管理的,所以我不知道如何在这种设计模式中创建无状态会话。
如果有人知道如何实施,请提供帮助。
答案 0 :(得分:0)
在每次调用entityManager.flush()
方法后,添加entityManager.clear()
和save()
。
如果你使用休眠,那么添加hibernate.jdbc.batch_size
并将其设置为n。 100可能就够了,但这是你的选择。
请参阅: Massive insert with JPA + Hibernate或http://frightanic.com/software-development/jpa-batch-inserts/
答案很老,但似乎工作正常。
答案 1 :(得分:0)
试试这段代码片段,它类似于我们在JDBC批处理中使用的方法..
public Long save(HttpServletRequest request) {
**//Further business logic here....**
for ( int i=0; i<count; i++ ) {
getEntityManager().persist((ABC) model);
if ( i > 0 && i % 2500== 0 ) {
getEntityManager().flush();
getEntityManager().clear();
}
}
tx.commit();
((EntityManager) session).close();
}