2014-01-14 4 views
0

Я использую Spring 3.0 и hibernate 4.x, но перед вами стоит проблема управления транзакциями. Я использую аннотацию @Transactional в слое сервиса, но для сохранения большого количества данных в базу данных требуется слишком много времени.Spring 3.x и hibernate 4.x проблема с управлением транзакцией с использованием @Transactional

вот мой менеджер транзакций:

<tx:annotation-driven /> 
<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

И я использую эту строку кода для вставки данных:

sessionFactory.getCurrentSession().save(deal); 

Пожалуйста, если кто-нибудь имеет решение, помочь мне.

+0

есть вставки или операции обновления? –

+0

В общем решении есть объемная вставка: http://stackoverflow.com/questions/9718305/batch-insertions-with-hibernate-spring –

+0

Я вставляю данные в базу данных. – user3061376

ответ

0

@Transactional не несет ответственности за вашу производительность. первого очереди использование Batch Processing для большого объема данных следующего

int i = 0; 
for(Deal deal : deals) 
    session.save(deal); 
    if (i % 20 == 0) { //20, same as the JDBC batch size 
     //flush a batch of inserts and release memory: 
     session.flush(); 
     session.clear(); 
    } 
    i++; 
} 
session.flush(); 
session.clear(); 

подробнее о главе 13. Batch processing

Иногда это не сам запрос, который вызывает замедление - еще один запрос, работающий на таблица может легко вставляться для замедления из-за изоляции транзакций и блокировки. подробнее об этом внешних factores

link1

innodb_buffer_pool_size=614M

too many indexes?

Primary Key Genration

Why is MySQL InnoDB insert so slow?

надеюсь, что это все поможет вам

Смежные вопросы