Я использую весеннюю транзакцию, чтобы включить операцию обновления в несколько дБ в одну транзакцию.скажем там 2 дБ обновлений за одну транзакцию.обновление 1 успешно, а второе - неудачно.Моя проблема заключается в том, что когда происходит такой случай, первое обновление БД фиксируется в БД, даже если второе обновление БД не удалось, что приводит к откату транзакции.
Объявление XML:
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="test" />
<property name="password" value="test" />
</bean>
<bean id="testDao" class="dao.TestDao">
<constructor-arg >
<ref local="simpleJdbcTemplate" />
</constructor-arg>
<constructor-arg >
<ref local="txManager" />
</constructor-arg>
</bean>
Java-код:
public class DaoCallback extends TransactionCallbackWithoutResult {
protected void doInTransactionWithoutResult(TransactionStatus arg0) {
try{
dbUpdate1();
dbUpdate2();
}catch(Exception e){
arg0.setRollbackOnly();
}
}
я намеренно делаю dbUpdate1 успешным, а dbUpdate2 неудачным, чтобы проверить, действительно ли откат работает.Когда я отлаживаю свой код, я вижу, что поток управления запускает исключение catch и вызывается метод "setRollbackOnly ()".
Но когда я проверяю базу данных, я вижу изменение из dbUpdate1().Поэтому, пожалуйста, помогите объяснить, что здесь не так?
Дара Кок,