如何使用hibernate和spring DAO模式在数据库中插入批量数据

时间:2016-09-12 07:06:08

标签: java spring hibernate spring-mvc dao

我正在使用一个使用Spring DAO + hibernate结构处理数据库的应用程序。

我想使用hibernate在oracle数据库中插入大量行(约20000行),但使用.save()非常慢。

我了解到使用StateLess会话可以做到这一点,但由于所有会话都是通过BaseDaoImp类管理的,所以我不知道如何在这种设计模式中创建无状态会话。

如果有人知道如何实施,请提供帮助。

2 个答案:

答案 0 :(得分:0)

在每次调用entityManager.flush()方法后,添加entityManager.clear()save()。 如果你使用休眠,那么添加hibernate.jdbc.batch_size并将其设置为n。 100可能就够了,但这是你的选择。

请参阅: Massive insert with JPA + Hibernatehttp://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();
    }