トランザクションを処理するために、Springの「@Transactional」アノテーションに取り組んでいます。
@Transactional(readOnly = false,propagation=Propagation.REQUIRES_NEW,isolation=Isolation.READ_UNCOMMITTED,rollbackFor=SQLException.class)
public void updateBatch(Report a)
throws SQLException, DataAccessException { insert1();insert2(); insert3(); }
しかし、場合に備えて
- insert1()-テーブルAにデータを正常に挿入します。
- insert2()-テーブルbにデータを正常に挿入します
- insert3()-チェックされた例外をスローし、テーブルCにデータを挿入しません
これらの挿入は、DBへの挿入をトリガーするibatisinbuild関数です。次の例外が発生しました
"原因:org.springframework.transaction.UnexpectedRollbackException:トランザクションは、ロールバックのみとしてマークされているため、ロールバックされました org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:717)で org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)で org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)で org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)で org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)で
また、トランザクションはロールバックされません。つまり、insert1()、insert2()はロールバックされません。
私が欠けているものを教えてください