Java @事务(rollbackFor={Exception.class})不回滚事务
我有下面一段代码,其中我将Spring的@Transactional注释与JDBC模板一起使用,它不会回滚事务。我使用了随机文件名和表名。我试图删除外键id的一行,然后在名为“data”的数据库表中插入相同id的记录。但是,当我进行测试时,我发现如果插入中有错误,则不会回滚删除。 我是春天的新手,所以任何帮助都将不胜感激 TestService.javaJava @事务(rollbackFor={Exception.class})不回滚事务,java,spring,spring-transactions,rollback,transactional,Java,Spring,Spring Transactions,Rollback,Transactional,我有下面一段代码,其中我将Spring的@Transactional注释与JDBC模板一起使用,它不会回滚事务。我使用了随机文件名和表名。我试图删除外键id的一行,然后在名为“data”的数据库表中插入相同id的记录。但是,当我进行测试时,我发现如果插入中有错误,则不会回滚删除。 我是春天的新手,所以任何帮助都将不胜感激 TestService.java @Service public class TestService { @Autowired TestR
@Service
public class TestService {
@Autowired
TestRepository testRepository;
@Transactional(rollbackFor={Exception.class})
public void insertData(List<Data> dataList, Integer fkId)
throws Exception {
testRepository.updateData(dataList, fkId);
//do some other stuff
}
}
@服务
公共类测试服务{
@自动连线
测试库测试库;
@事务性(rollbackFor={Exception.class})
公共void insertData(列表数据列表,整数fkId)
抛出异常{
testRepository.updateData(数据列表,fkId);
//做些别的事情
}
}
TestRepository.java
@Respository
public class TestRepository {
@Autowired
@Qualifier("dataJdbcTemplate")
private NamedParameterJdbcTemplate dataJdbcTemplate;
@Transactional(rollbackFor={Exception.class})
public void updateData(List<Data> dataList, Integer fkId)
throws Exception {
String deleteId = "DELETE FROM data where
fk_id = :fkId";
dataJdbcTemplate.update(deleteId, new
MapSqlParameterSource("fkId", fkId));
String sql = "INSERT INTO data(fk_id, column1, column2)"
+ " VALUES(:fkId, :column1, :column2)";
SqlParameterSource[] batch =
SqlParameterSourceUtils.createBatch(dataList.toArray());
dataJdbcTemplate.batchUpdate(sql, batch);
}
@Respository
公共类测试库{
@自动连线
@限定符(“dataJdbcTemplate”)
私有名称参数jdbctemplate数据jdbctemplate;
@事务性(rollbackFor={Exception.class})
public void updateData(列表数据列表,整数fkId)
抛出异常{
String deleteId=“从数据中删除,其中
fk_id=:fkId”;
dataJdbcTemplate.update(deleteId,新的
MapSqlParameterSource(“fkId”,fkId));
String sql=“插入数据(fk_id,第1列,第2列)”
+“值(:fkId,:column1,:column2)”;
SqlParameterSource[]批处理=
SqlParameterSourceUtils.createBatch(dataList.toArray());
batchUpdate(sql,batch);
}
database.xml
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="dataJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.
NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
您应该尝试启用事务传播 您可以在此处阅读更多内容:
我尝试在存储库方法中添加@Transactional(rollboor={Exception.class},propagation=propagation.REQUIRED),但没有成功。