Java @事务(rollbackFor={Exception.class})不回滚事务

Java @事务(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

我有下面一段代码,其中我将Spring的@Transactional注释与JDBC模板一起使用,它不会回滚事务。我使用了随机文件名和表名。我试图删除外键id的一行,然后在名为“data”的数据库表中插入相同id的记录。但是,当我进行测试时,我发现如果插入中有错误,则不会回滚删除。 我是春天的新手,所以任何帮助都将不胜感激

TestService.java

   @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),但没有成功。