2012-10-11 33 views

cevap

10

RuntimeException listesine rollbackFor listesinde yer verilmesine gerek yoktur. Bahsetmeyeceksen bile başa çıkacak.

Ben jdbcTemplate için dışarı denedim: -

@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"); 
} 
Ancak
 
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

yine taahhüt asla olmaz çünkü readOnly = true var mı? –

+0

@AlexBeardsley thnx hatayı işaret etmek için ... cevabı değiştirdim .. Kodu yeniden çalıştırdım .. ve evet, rollbackFor listesinde çalışma zamanı istisnasını eklemeniz gerekmiyor. – deepakraut

5

, Bahar Framework'ün işlem altyapı kodu, varsayılan olarak, yalnızca için bir işlem işaretlemek unutmayın.Yeni çalışma zamanı, geri çağrılmayan istisnalar durumunda geri alma; Yani, atılan istisna bir RuntimeException örneğidir veya alt sınıfıdır. (Hatalar da olacak - varsayılan olarak -. Bir geri alma neden) döndürülüyor işlemde neden olmaz bir işlem yönteminden atılan istisnalar kontrol edildi.

Source

Bu yardımcı olabilir: Spring transaction management with checked and unchecked exception

0

Yani (varsayılan olarak RuntimeException) yanı geri CheckedException dönüş yapabilmekte, örnek:

@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(); 
    } 
}