Spring Integration @Transactional откат многих операций с базой данных

Моя проблема проста: я хочу отменить все изменения базы данных, вызванные вызовом моего метода обслуживания. У меня проблема с правильным аннотированием. Я не совсем уверен, где поставить @Transactional и где я должен установить распространение на REQUIRES_NEW или MANDATORY. Я вставлю написанный мной код, который помимо того, что выбрасывается SQLException, не откатывает изменения бд.

Код:

@Service
public class SwapInsertService {

    @Autowired
    MyDao myDao;

    @Transactional(propagation = Propagation.REQURIES_NEW, rollbackFor = SQLException.class)
    public void insertToManyTables(MyData data) throws SQLException {

        insertToSpecificTables(data);
        myDao.insertTwo(data);
    }

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertToSpecificTables(MyData data) throws SQLException {

        myDao.insertOne(data);
    }
}

@Repository
public class MyDaoImpl implements MyDao {

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertOne(MyData data) throws SQLException {

        // INSERT
    }

    @Transactional(propagation = Propagation.MANDATORY)
    public void insertTwo(MyData data) throws SQLException {

        // throws SQLException 
    }
}

Предположим, что insertTwo выдает SQLException . Хотелось бы откатить все предыдущие вставки. Что я делаю неправильно?

Мое понимание:

Propagation.REQURIES_NEW создает новую транзакцию. Propagation.MANDATORY поддерживает текущую транзакцию.

insertTwo выдает ошибку, insertToManyTables все откатывает и вуаля. К сожалению, это не так просто.

EDIT: важно отметить, что я использую CGLIB для прокси.


person BartoszMiller    schedule 20.09.2012    source источник
comment
Правильно ли вы объявили TransactionManager (<bean id="txManager"...) в конфигурации spring? см. static.springsource.org/spring/docs /3.0.x/ссылка/   -  person fasseg    schedule 20.09.2012
comment
Да, он заявлен и я вижу в логах, что прокси созданы. Насколько я знаю, создание прокси запускается @Transactional. Я использую CGLIB.   -  person BartoszMiller    schedule 20.09.2012


Ответы (1)


Проверьте, установлено ли для AUTO_COMMIT значение false в конфигурации источника данных в специфичном для весны xml

person khj    schedule 20.09.2012
comment
Я посмотрю и дам вам знать. Я не учел этого. Спасибо. - person BartoszMiller; 20.09.2012
comment
Похоже, вы были правы, мой источник данных был настроен на автоматическую фиксацию. Спасибо. - person BartoszMiller; 21.09.2012