Весенняя транзакция не возвращается - PullRequest
0 голосов
/ 11 января 2020

Я использую пружинные транзакции и режим гибернации для вставки данных в таблицу базы данных oracle:

Вот сценарий, с которым я сталкиваюсь: у меня есть две таблицы, которые имеют однозначное сопоставление в режиме гибернации. И я вставляю данные в эти две таблицы, используя приведенные ниже вызовы методов. Транзакция распространяется от одного метода к другому. Так что вставка данных в обе таблицы происходит в одной транзакции.

Проблема: в том, что при вставке данных во второй таблице, если исключение, такое как "constraintvoilationexception --- не может вставить ноль в конкретный столбец", выбрасывается, .... тогда в идеале данные не должны вставляться ни в одну из таблиц, т.е. транзакция должна откатываться ,, , ... Но этого не происходит ... когда возникает исключение при вставке данных во вторую таблицу ... записи вставляются в первую таблицу, что в идеале не должно происходить, т. Е. Вся транзакция должна откатываться. ..

Можете ли вы помочь, ... где я ошибаюсь при применении @Transactional, или есть какая-то другая причина для этого (может быть, со стороны базы данных, хотя не уверен)

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodA(){
  // inserting data in table 1;
methodB();

}

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodB{
// inserting data in table 2;

}

1 Ответ

0 голосов
/ 11 января 2020

Определяет ноль (0) или более классов исключений, которые должны быть подклассами Throwable, указывая, какие типы исключений должны вызывать откат транзакции. Подробности здесь

  @Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
          public void methodA(){
          try{

          // inserting data in table 1;
           methodB();
         }
          catch(Exception ex)
         {
           }

        }

        public void methodB{
        // inserting data in table 2;

        }
...