2
我使用spring事務將幾個數據庫更新操作包含到單個事務中。假設在單個事務中有2分貝更新。更新1成功,而第二次失敗。我的問題是當這種情況發生時,即使第二個數據庫更新失敗導致事務回滾,第一個數據庫更新也會提交給數據庫。Spring編程Jdbc事務回滾不起作用
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()的變化。那麼請幫忙解釋這裏有什麼問題?
Dara kok,
你能否給你的問題添加更多描述(指示MyISAM)並標記爲已回答? (反對你的回答:)) – 2011-01-30 07:38:04