2016-03-29 14 views
1

Ben hiberante işlemi kullanıyorum, işlemimde ben() db, var Ben yinelenen devam ederse başarısızlık geri alma işleminden kaçınmak istiyorum satırlar. MümkünJava Hazırda bekletme işlemi başarısız olmadığında başarısız olur, çünkü çift anahtarlar db içinde

db.getTransaction().begin; 

for (Item item : itemList) { 
    try{ 
     //If duplicate key - don't fail the transaction 
     db.persist(item); 
     } 
     catch(Exception e){ 
      System.out.println(e.getMessage()); 
     } 
} 

db.commit(); 

mi: İşte benim kodudur? Herhangi bir fikrin var mı?

cevap

0

Bir çok nedenden dolayı biraz risklidir, ancak ConstraintViolationException (yinelenen anahtar istisnası) öğesini her zaman ayrı olarak yakalayabilir ve buna göre hareket edebilirsiniz.

+0

Nasıl davranılır? Işlem başarısız oldu ... – TwTw

+0

Bu özniteliği koymak gerekir: noRollbackFor = ConstraintViolationException.class çağrılan yönteminin @ Transactional bildirimi. –

+0

sorunu, veritabanı tarafından özgün olarak atılır. İşlem bitmeden önce çalkalamanız gerekecek. Yani ısrar ettikten hemen sonra bir yıkayın –

İlgili konular