@Transactional распространяет транзакции только за несколько исключений

Я пытаюсь сделать транзакцию неудачной для всех непроверенных исключений, кроме определенного непроверенного исключения (в моем случае - DuplicateKeyException). Как я могу добиться этой настройки, используя аннотацию @Transactional среды Spring?

Благодарю вас!


person Seema    schedule 12.09.2013    source источник
comment
Итак, что вы ожидаете, когда произойдет DuplicateKeyException? Как вы понимаете, что транзакция «не проваливается»?   -  person gerrytan    schedule 12.09.2013
comment
Я ловлю исключение DuplicateKeyException и продолжаю транзакцию. Если установить @Transactional(propogation=Propogation.NEVER), все пойдет так, как я ожидаю, в противном случае выдается следующее сообщение об ошибке: org.springframework.jdbc.core.StatementCreatorUtils - вызов JDBC 3.0 getParameterType не поддерживается : текущая транзакция прервана, команды игнорируются до конца блока транзакции   -  person Seema    schedule 12.09.2013


Ответы (2)


Попробуйте noRollbackFor

@Transactional(noRollbackFor=DuplicateKeyException.class)
person Arun P Johny    schedule 12.09.2013
comment
Я пробовал это, но это дает ту же ошибку. Проблема, по-видимому, в том, что транзакция завершается с ошибкой, и это сообщает менеджеру транзакций, каким должно быть действие отката при неудачной транзакции. - person Seema; 12.09.2013

Сделай это так :

public void driverMethod(){
try{
   BeforeException()
}
catch(DuplicateKeyException e)
   AfterException()
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
private BeforeException(){
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
private AfterException(){
}
person Dinesh Choudhary    schedule 31.12.2019