2012-10-30 31 views
5

jpaを休止状態で使用しています。100レコードをデータベースに挿入したいと思います.50回目のレコード挿入でJDBCバッチ更新を実行する必要があります。 DBに。例外が発生したときにバルク挿入を続ける方法

コード:

private List<TempCustomers> tempCustomer =new ArrayList<TempCustomers>(); 

    public String migrateCustomers() { 

     TempCustomers temp = null; 
     for(DoTempCustomers tempCustomers:doTempCustomers){ 

       try { 
       temp=new TempCustomers(); 
       BeanUtils.copyProperties(temp, tempCustomers); 
         tempCustomer.add(temp); 
        entityManager.persist(temp); 


       }catch (Exception e) { 
        tempCustomer.add(temp); 
        entityManager.persist(temp); 
        log.info("Exception ..."+e); 
        return "null"; 
       } 
     } 


     return "null"; 
    } 
+0

回答ありがとうございます、Listから100レコードを読み込むとしたら、entityManager.persist(temp)を使用して存続します。そのレコードでは1レコードが適切ではないため、JDBCバッチ例外を使用して休止します。私はデータベースを保存したい、どうすればいい? – nag

+0

はい..Ras、私は例外を見つけ、持続するためにリーミングする必要があります。どのようにすることができますか? – nag

+1

この 'log.info(" Exception ... "+ e);' ...これはスタックトレースを呑み込むことはありません。代わりに 'log.info(" Exception ... "、e);をパラメータとして例外として使用してください – artbristol

答えて

0

Nagendra。

RAS氏が言っていることは正しいです。

たとえば、100個のエンティティを永続化していて、50番目のエンティティで例外が発生しました。あなたは例外ハンドラを持っていますので、それを処理することができます。現在のものをスキップして次のものを処理します。

1 - あなたの例外処理がループ内にあるべきである、あなたはすでにそれを持っていることを望みます:

物事は次のように世話をします。

2例外の場合、エンティティを別のリストに保存して、エラーの詳細をさらに分析できます。それを例外キャッチブロックで行います。

3トランザクションマネージャを使用しているかどうかはわかりませんが、トランザクション処理には注意が必要です。

- 第二ケースの行を削除してください...

entityManager.persist(TEMP)で

+0

Rudra上記のコードでtempCustomerリストがエンティティobjec(temp)に追加されて、 entityManager.persist(temp)文の場合のみ、このサンプルコードを作成できますか? – nag

0

あなたが既に知っているので、これは例外をスローします。あなたのさらなる分析のためにそれをリストに残してください。どのキュー(ActiveMQ)に入れても良いでしょう。このため

最善の解決策は、再びです:

検証し、すべてのデータの前に持続...例外を最小限に抑えること。ランタイムのものはあなたの再処理が必要です。これは手動で行う必要があります。

+0

警告として、あなたのウェブサイトにリンクしているフッターを使用しないでください。そうしないと、回答が迷惑メールになる可能性があります。 –

関連する問題