hibernate session.flush() and spring transaction

Подскажите плз в какую сторону копать. Для примера ниже в базе останется 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 минуты).