Spring Jdbc atomicity с альтернативным столом - PullRequest
3 голосов
/ 13 июля 2010

Я пытаюсь написать эквивалент механизма эволюции / отката модели данных Rails с использованием Spring Jdbc.

Spring Jdbc транзакция insert/replace работает очень хорошо (DataSourceTransactionManager с PROPAGATION_REQUIRED в InnoDB mysql 5):

// Transaction begins
getJdbcTemplate().execute("replace into aTable ...");
getJdbcTemplate().execute("wrong request");
getJdbcTemplate().execute("replace into aTable ...");
// none are commited

, но alter нет:

// Transaction begins
getJdbcTemplate().execute("alter table aTable add column `columnForTest` ...");
getJdbcTemplate().execute("wrong request");
getJdbcTemplate().execute("alter table aTable add column `columnForTest` ...");
// the first alter is commited

Есть ли способ достичь атомарности (поведение "все или ничего") с alter?

Заранее спасибо

1 Ответ

4 голосов
/ 13 июля 2010

ALTER TABLE (и другие операции DDL ) обычно не транзакционные, в зависимости от базы данных. Spring и JDBC не контролируют это. Если нетранзакционная операция выполняется внутри транзакции, она будет выполняться не транзакционно.

Таким образом, все сводится к базе данных и ее настройке, а не к проблеме с клиентом.

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