2017-03-21 6 views
1

以下に示すように、レコードセットをdbに保存しようとしています。私はテーブルの2列にユニーク制約を設定しました。私は制約の例外を処理しました。新しいレコードを挿入すると問題はありません。重複するレコードを挿入しようとすると、例外が処理されますが、ms SQLサーバーはクエリを実行しています。Hibernate制約違反例外がSQLサーバをハング

データソースからの応答を待っています。

また、新しいレコードセットを挿入しようとすると、http要求が完了せず、レコードが挿入されません。 SQL Serverがハングしないように制約の例外を処理する方法はありますか?

public void addStepFlow(List<StepFlow> stepFlows) { 

     Session session = this.sessionFactory.openSession(); 
     try { 
     Transaction tx = session.beginTransaction(); 
     for (StepFlow stepFlow : stepFlows) { 

      session.save(stepFlow); 

      session.flush(); 
      session.clear(); 
     } 
     tx.commit(); 
     session.close(); 
     } catch (JDBCException e) { 
      SQLException cause = (SQLException) e.getCause(); 
      System.out.println(cause.getMessage()); 
     } 
    } 
+0

は、なぜあなたは代わりに、一つ一つのバッチ挿入をしませんか? – shrinathM

+0

ちょうど学び始めました。それをする方法を知らない。 – user7620991

答えて

0

てみ..例外にロールバックしてもheppens何に関係なく、セッションを閉じないように:

Session session = this.sessionFactory.openSession(); 
    Transaction tx = null; 
    try { 
    tx = session.beginTransaction(); 
    for (StepFlow stepFlow : stepFlows) { 

     session.save(stepFlow); 

     session.flush(); 
     session.clear(); 
    } 
    tx.commit(); 

    } catch (JDBCException e) { 
     SQLException cause = (SQLException) e.getCause(); 
     System.out.println(cause.getMessage()); 

     tx.rollback(); 
    }finally{ 
     session.close(); 
    } 
+0

はいtryブロックの前にtxを定義する必要があります。私の更新を試してください –

+0

はい私は緊張を忘れました。それは – user7620991

+0

でしたありがとうそれは働いた。 – user7620991

関連する問題