Spring вложенный метод @Transactional и откат

У меня есть класс @Service, в котором есть метод @Transactional, который вызывает другой метод @Transactional того же класса. Я тестировал откат для этого и обнаружил, что он не работает должным образом. Код выглядит примерно так:

@Service
public class DefaulService implements ervice
{
    @Transactional
    public void methodOne()
    {
        methodTwo();

            //question edited
            //this seems to be the problem
            this.serviceDAO.executeUpdateOperation();

        //test rollback
        throw new RuntimeException();
    }

    @Transactional
    public void methodTwo()
    {
        //DAO stuff
    }
}

После запуска methodOne я проверяю базу данных и обнаруживаю изменения, хотя в журнале указано «JDBCTransaction - откат».

Если я вызываю methodTwo по отдельности и добавляю исключение в конце, изменения откатываются правильно.

Есть ли способ заставить methodOne должным образом откатить изменения, произошедшие во время вложенного вызова @Transactional? У меня создалось впечатление, что стандартное распространение REQUIRED достигнет этого, но, похоже, это не работает. Спасибо

ОБНОВЛЕНИЕ

Хорошо, я заметил кое-что еще. Прямо перед выбросом исключения я вызываю службу dao и выполняю обновление вручную с помощью executeUpdate. Если я прокомментирую эту строку, вложенный откат работает. Таким образом, похоже, что проблема на самом деле заключается в вызове DAO и выполнении запроса executeUpdate. Но разве это не должно выполняться внутри текущей транзакции?

7
задан JayPea 9 November 2011 в 21:04
поделиться