Я использую транзакцию Spring, чтобы включить несколько операций обновления БД в одну транзакцию. скажем, есть 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(). Помогите, пожалуйста, объяснить, что здесь не так?
Дара кок,