Использование AbstractTransactionalJUnit4SpringContextTests с Oracle Procs, которые COMMIT - PullRequest
0 голосов
/ 17 января 2011

Я использую AbstractTransactionalJUnit4SpringContextTests для запуска простого теста:

public class MyTests extends AbstractTransactionalJUnit4SpringContextTests
{
    @Test
    public void simpleProcTest()
    {
        simpleJdbcTemplate.update("BEGIN p_dummy_commit; END;");
    }
}

Упомянутый процесс выполняет простое обновление таблицы, а затем COMMIT.

Проблема в том, что изменение, внесенное этим фиктивным процессом, не откатывается, как я надеялся.

Справочная информация: у нас есть большое приложение, в котором есть множество процедур, которые делают это, я пытаюсь выяснить, как проверить их в режиме отката несмотря на то, что содержит явные операторы COMMIT.

Я надеюсь воспользоваться возможностью вложения транзакций, которую, как я думал, я могу получить "бесплатно" с этим суперклассом Spring. Кажется, я не знаю.

Кто-нибудь знает, как этого добиться?

Я подтвердил, что откат завершился, как и ожидалось, когда я выполняю прямые UPDATE SQL вне proc, поэтому мой источник данных Spring и TransactionManager выглядят нормально.

Ответы [ 2 ]

0 голосов
/ 17 января 2011

В автономном режиме мне посоветовали, что, поскольку наши прокы полны явных операторов COMMIT, мы просто не сможем легко выполнить 100% чистый откат.Бах обманщик.

0 голосов
/ 17 января 2011

Вложенные транзакции - это, вероятно, путь.

Очевидно (согласно DataSourceTransactionManager вложенные транзакции требуют использования SavePoint механизм. И если я правильно понимаю Oracle Docs , вы, вероятно, сможете откатить внешнюю транзакцию, если ваша хранимая процедура устанавливает точку сохранения.

Но как вы можете заставить SpringЯ знаю, что ваша SavePoint мне не по силам. Возможно, вы должны явно вызывать ее в своем SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...