我有以下代码......
@Transactional (rollbackFor = Exception.class)
public String log(AuditRecord aRecord) throws AuditException {
auditMaster(aRecord); //1. has an audit id and inserts into Audit table
System.out.println(aRecord.getAuditId());
if(true)
throw new AuditException(Error.DUMMY_ERROR);
auditSingleValued(aRecord); //2.
auditMultiValued(aRecord); //3
}
日志功能中的三个auditXXX()方法正在插入到不同的表中。因为我已经在log方法上声明了@Transactional,所以我期望由于if(true)块中的异常,应该回滚auditMaster()方法(在1.)上的插入。但是这种情况没有发生,当我检查我的数据库时,它有一个System.out.println正在打印的新的Audit Id条目。
可以做些什么来实现回滚并使其成为整个log()方法的原子事务?
我是否还需要在各个auditXXX方法上声明@Transacional? 我的bean配置有这个条目......
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>