【问题标题】:How to insert bulk data in database using hibernate and spring DAO pattern如何使用hibernate和spring DAO模式在数据库中插入批量数据
【发布时间】:2016-09-12 07:06:07
【问题描述】:

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

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

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

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

【问题讨论】:

  • 通过管理事务使用 Hibernate 原生查询。
  • 请详细说明如何做到这一点

标签: java spring hibernate spring-mvc dao


【解决方案1】:

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

见: Massive insert with JPA + Hibernatehttp://frightanic.com/software-development/jpa-batch-inserts/

答案很老,但似乎工作正常。

【讨论】:

  • Session 对象通过 BaseDaoI.java(DAO 对象)在内部进行管理,我无法对其进行更改。我所拥有的只是方法、.persist .save 等工作
【解决方案2】:

试试这段代码 sn-p,它类似于我们在 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();
    }

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2022-01-08
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多