2012-10-11 8 views

risposta

10

Non è necessario includere RuntimeException nell'elenco rollbackFor. Lo gestirà anche se non lo menzioni.

ho provato per jdbcTemplate: -

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = MyException.class) 
public void updateSalary(final int increment){ 
    jdbcTemplate.update("update EMPLOYEE set emp_salary = emp_salary + ?", increment); 
    throw new RuntimeException("update exception"); 
} 
 
Output: 
After Insertion: 
1 Deepak 35000 
2 Yogesh 35000 
3 Aditya 35000 

update exception 
After Update 
1 Deepak 35000 
2 Yogesh 35000 
3 Aditya 35000 
+0

non è vero mai impegnarsi in ogni modo perché hai letto solo = vero? –

+0

@AlexBeardsley thnx per aver segnalato l'errore ... ho modificato la risposta .. Ho ri-eseguito il codice .. e sì, non è necessario includere l'eccezione di runtime nella lista rollbackFor. – deepakraut

5

Tuttavia, si ricorda che la transazione codice di infrastruttura di primavera quadro sarà, per impostazione predefinita, segnare solo una transazione per rollback in caso di runtime, eccezioni non controllate; ovvero, quando l'eccezione generata è un'istanza o sottoclasse di RuntimeException. (anche gli errori - per impostazione predefinita - comportano un rollback.) Le eccezioni verificate da generate da un metodo transazionale non determinano nella transazione in fase di rollback.

Source

Questo potrebbe aiutare: Spring transaction management with checked and unchecked exception

0

Quindi è possibile ripristinare con CheckedException così (RuntimeException per impostazione predefinita), ad esempio:

@Transactional(rollbackFor = Exception.class) 
public void save(Book book) throws Exception { 
    bookRepository.save(book); 
    System.out.println("Saved in transcation."); 
    // No data is persisted 
    if (true) { 
     throw new Exception(); 
    } 
} 
Problemi correlati