@Transactional (rollbackFor = {Exception.class}) не выполняет откат транзакции - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующий фрагмент кода, где я использую аннотацию Spring @Transactional с шаблоном JDBC, и она не выполняет откат транзакции.Я использовал случайные имена файлов и имена таблиц.Я пытаюсь удалить строку для идентификатора внешнего ключа и затем вставить запись для того же идентификатора в таблицу базы данных с именем «data».Но когда я тестировал, я вижу, что если во вставке есть ошибка, удаление не откатывается.Я довольно новичок в Spring, поэтому любая помощь будет оценена.

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
      }
 }

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);


 }

database.xml

    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="dataJdbcTemplate" 
      class="org.springframework.jdbc.core.namedparam.
      NamedParameterJdbcTemplate">
      <constructor-arg ref="dataSource"/>
    </bean>

1 Ответ

0 голосов
/ 21 мая 2018

Вы должны попробовать включить распространение транзакции.

Вы можете прочитать больше здесь: https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-propagation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...