2016-09-12 4 views
0

Я работаю над приложением, которое использует структуру Spring DAO + hibernate для работы с базой данных.Как вставить массовые данные в базу данных с использованием спящего и весеннего шаблона DAO

Я хочу вставить большую часть строк (20000) в базу данных oracle с помощью спящего режима, но с использованием .save() очень медленно.

Я узнал, что с помощью сеанса StateLess это можно сделать, но поскольку все сеансы управляются с помощью класса BaseDaoImp, я не знаю, как создавать сеансы без состояния в этом шаблоне проектирования.

Пожалуйста, помогите, если кто-нибудь знает, как это реализовать.

+0

Использование Hibernate нативный запрос по управлению сделки. –

+0

Пожалуйста, немного уточните, как это сделать. – shrish

ответ

0

Добавить entityManager.flush() и entityManager.clear() после каждого n-го вызова метода save(). Если вы используете спящий режим, то добавьте hibernate.jdbc.batch_size и установите его равным n. 100 может быть достаточно, но это ваш выбор.

см: Massive insert with JPA + Hibernate или http://frightanic.com/software-development/jpa-batch-inserts/

Ответы довольно старый, но, кажется, отлично работает.

+0

Объект сеанса управляется внутренне через BaseDaoI.java (объект DAO), и я не могу вносить в него изменения. все, что у меня есть, это методы, .persist .save и т. д., чтобы работать – shrish

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(); 
    }