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

Опитвам се да направя транзакция неуспешна за всички непроверени изключения, с изключение на конкретно непроверено изключение (в моя случай - DuplicateKeyException). Как мога да постигна това персонализиране с помощта на @Transactional анотация на Spring framework?

Благодаря ти!


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 извикването не се поддържа org.postgresql.util.PSQLException: ГРЕШКА : текущата транзакция се прекъсва, командите се игнорират до края на транзакционния блок   -  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