2016-03-29 16 views
1

トランザクションでhiberanteのトランザクションを使用しています。永続(db)に をコピーします。行。ここ は私のコードです:JavaのHibernateは、dbの重複キーのために失敗したときにトランザクションをロールバックしません。

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

それは可能ですか?

答えて

0

多くの理由から少し危険ですが、常に重複するキー例外であるConstraintViolationExceptionを個別にキャッチし、それに応じて動作させることができます。

+0

これに応じて行動する方法は?トランザクションが失敗しました... – TwTw

+0

呼び出されたメソッドの@Transactional宣言にnoRollbackFor = ConstraintViolationException.classという属性を入れる必要があります。 –

+0

問題は、もともとデータベースによってスローされた問題です。トランザクションが終了する前にフラッシュする必要があります。だから、持続が終わった直後に –

関連する問題