hibernate session.flush() and spring transaction

топ 100 блогов ru_java24.04.2011 Столкнулся со следующей проблемой. Делаю батч импорт в базу несколько миллионов записей. Пытаюсь это сделать в одной транзакции, после каждых 100 записей делаю session.flush() и session.clear() чтобы хибернейт не упал из-за переполнения кэша и памяти. Почему-то если в процессе импорта происходит ошибка то уже добавленные записи в базе остаются.

Подскажите плз в какую сторону копать. Для примера ниже в базе останется 50000 записей, хотя не должно ничего остаться.


public class MyDao extends HibernateDaoSupport {

public void save(Object entity) {
getHibernateTemplate().save(entity);
}
public void flush() {
getHibernateTemplate().flush();
getHibernateTemplate().clear();
}
}
@Transactional
public class MyService {
private MyDao dao;
@Transactional
public void service() {
for (int i = 0; i < 1000000; i++) {
MyEntity entity = new MyEntity();
dao.save(entity);
if (i % 100 == 0) {
dao.flush();
}
if (i == 50000) {
throw new RuntimeException();
}
}
}
}




Update
Всем спасибо. Проблема решена. Ошибка была в использовании HibernateDaoSupport. В приложении использовался JPA transaction manager и поэтому транзакции в дао не работали. Переписал дао с использованием JpaDaoSupport и всё заработало!
удаление 2.6 миллиона старых записей и потом вставка 2.6 миллиона новых записей выполняется в одной транзакции за 16 минут, если сгенерить ошибку на последней вставляемой записи (чтобы сработал rollback) то выполняется за 19 минут (то есть rollback занимает 3 минуты).

Оставить комментарий

Архив записей в блогах:
Это цитата сообщения Аннушка_Левятова Оригинальное сообщениеКоляска с секретом ...
Вы в пятницу выглядите так же как я? Именинники: Герман, Дмитрий, Ия, Cергей, Федора Поздравляю с днем рождения: annazv77 - Анна marisha - Марина Если вы хотите поделиться этой новостью с друзьями - просто нажмите ...
Всем привет! Зовут меня Электра, мне 27, я ведущая кулинарных курсов и вечный наблюдатель за планетой. Буду показывать свой выходной 3 ноября, наконец-то вместе с любимым. Все происходило в Москве. 1. Просыпаюсь без будильника (ничего грандиозного, через пару часов я снова лягу) ...
за несколько дней до наступления нового года у меня расцвела орхидея! до этого она несколько лет пребывала в анабиозе)) я думала, что уже и не увижу мою красавицу в цвету... ан нет! вот такой подарок мне на Новый год получился! Посмотреть на Яндекс.Фотках мне ее подарили лет ...
Привет ребята, сегодня в выпуске свежие P.O.D., Duran Duran, Bleachers, Комсомольск,  Аффинаж и парочка альбомов. Ну а начнем с главной новинки минувшей недели. blink-182 - ONE MORE TIME (альбом One More Time... ) Они снова вместе и 20 октября ...