2012-10-30 10 views
5

Ich benutze jpa mit Ruhezustand Ich möchte 100 Datensatz in Datenbank einfügen, nehme ich Ausnahme JDBC Batch-Update in 50. Datensatz einfügen Ich muss die Ausnahme behandeln und ich muss verbleibenden Datensatz persistent an die DB.Wie weiter Masseneinfügungen wenn Ausnahme auftritt

Code:

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

danke für die Antwort, nehme an, 100 Datensatz aus Liste zu lesen, dann werde ich mit der entityManager.persist (temp) .. in dieser Liste ein Datensatz ist nicht ordnungsgemäß, so Ruhezustand durch die JDBC Batch Exception .Zeit reaming 99 Datensatz Ich möchte Datenbank speichern, wie kann ich es tun? – nag

+0

ja ..Ras, ich muss Ausnahme fangen und reimen, um zu bestehen. Wie kann es tun? – nag

+1

Tun Sie das nie "log.info" ("Exception ..." + e); '... es schluckt den Stack-Trace. Verwenden Sie stattdessen 'log.info (" Exception ... ", e);' mit der Ausnahme als Parameter – artbristol

Antwort

0

Nagendra.

Was Herr RAS sagt, ist richtig.

Zum Beispiel Sie bestehen 100 Entitäten und Ausnahme in der 50. Entität persistiert passiert. Sie haben einen Ausnahme-Handler, der Ihnen hilft, mit der Situation umzugehen. Es wird den aktuellen überspringen und den nächsten verarbeiten.

Dinge zu kümmern, wie folgt:

1- Ihre Ausnahmebehandlung innerhalb der Schleife sein soll, hoffen, Sie haben es bereits.

2- Für Ausnahme können Sie die Entität in einer anderen Liste für weitere Analysen für Fehlerdetails speichern. Mach es im Ausnahme-Catch-Block.

3- Ich bin mir nicht sicher, ob Sie den Transaktionsmanager verwenden oder nicht, Transaktion muss vorsichtig sein.

-

+0

Rudra, wie kann ich zweiten Fall erreichen, durch obigen Code tempCustomer Liste hinzugefügt Entität objec (temp), gibt es eine Ausnahme Nur bei einer EntityManager.Persist (temp) -Anweisung können Sie Beispielcode dafür erstellen? – nag

0

Im zweiten Fall entfernen Sie bitte die Linie ...

EntityManager.persist (temp);

Wie Sie bereits wissen, löst dies eine Ausnahme aus. behalte es in der Liste für deine weitere Analyse. besser in jede Warteschlange (ActiveMQ) bis zu Ihnen.

für diese beste Lösung ist, wieder:

Validate alle Ihre Daten vor bestehen bleiben ... die Ausnahme zu minimieren. Laufzeit-Dinge brauchen deine erneute Verarbeitung wieder und das sollte manuell sein.

+0

Als Warnung sollten Sie keine Fußzeilen verwenden, die auf Ihre Website verweisen, oder Ihre Antworten werden möglicherweise als Spam gekennzeichnet. –

Verwandte Themen