springトランザクションを使用して、1回のトランザクションに数回のdb更新操作を組み込みます。 1つのトランザクション内で2 dbの更新を言いましょう。更新1は成功し、2番目の更新は失敗します。私の問題は、そのようなケースが発生したとき、最初のdb updateはdbにコミットされますが、トランザクションのロールバックにつながる2回目のdb updateに失敗しました。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()からの変更を見ることができます。だから何が間違っているのか説明してください。
ダラック、
あなたの質問(MyISAMを示す)に説明を追加し、回答としてマークしてください。 (あなたの答えに対して:)) –