6

データベースに100レコードを挿入したい休止状態でjpaを使用しています。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";
    }
4

2 に答える 2

0

2番目のケースでは、行を削除してください...

entityManager.persist(temp);

ご存知のように、これは例外をスローします。詳細な分析のためにリストに保存してください。任意のキュー (ActiveMQ) に入れることをお勧めします。

これに対する最善の解決策は次のとおりです。

永続化する前にすべてのデータを検証して、例外を最小限に抑えます。実行時のものには再処理が必要であり、それは手動で行う必要があります。

于 2012-10-30T14:46:25.343 に答える
0

ナゲンドラ。

RASさんのおっしゃることは正しいです。

たとえば、100 個のエンティティを永続化していて、50 番目のエンティティの永続化で例外が発生したとします。状況を処理するために機能する例外ハンドラがあります。現在のものをスキップして、次のものを処理します。

以下のように気をつけてください。

1-例外処理はループ内にある必要があります。すでにあることを願っています。

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

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

--

于 2012-10-30T14:06:49.167 に答える