ChainedTransaction Manager выдает исключение HeuristicCompletionException, а не откат - PullRequest
1 голос
/ 06 августа 2020

У меня есть chainedTransactionManager и два разных источника данных. Моя проблема в том, что объект MydataSource1 имеет уникальное нарушение ограничения в базе данных. Mydatasource1.save работает, затем он переходит в mydatasource2.save, а затем выдает HeuristicCompletionException и mydatasource2.save, а не откат. Я хочу откат без каких-либо условий, если возникнут какие-либо исключения

> org.springframework.transaction.HeuristicCompletionException:
> Heuristic completion: outcome state is mixed; nested exception is
> org.springframework.dao.DataIntegrityViolationException: could not
> execute statement; SQL [n/a]; constraint [MYSchema.UNIQUE_NAME]; nested
> exception is org.hibernate.exception.ConstraintViolationException:
> could not execute statement\r\n\tat
> org.springframework.data.transaction.ChainedTransactionManager.commit(ChainedTransactionManager.java:177)\r\n\tat
> org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:619)\r\n\tat
> org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:372)\r\n\tat

@Transactional(rollbackFor = {Exception.class,Throwable.class}, isolation = Isolation.READ_COMMITTED, transactionManager = "MychainedTransactionManager", propagation = Propagation.REQUIRED)
        public void saveMultipleDBSource() 
    {
    ...........
    MyDataSource1.Save(Entity1)
    
    MyDataSource2.Save(Entity2)
    
    }

1 Ответ

0 голосов
/ 06 августа 2020

обходной путь_1:

Вот, опробованный и протестированный аналогичный сценарий , который, кажется, уже проанализирован, обсужден и решен Я бы предложил вам, дать это попробуйте & go по всему потоку, что соответствует вашему сценарию. В настоящее время вы получаете состояние: STATE_MIXED , тогда как у него было состояние: STATE_ROLLED_BACK

Обходное решение_2:

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

Надеюсь, это поможет вам как-то или другой. Спасибо. :)

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