2012-10-30 13 views
5

Używam jpa ze stanem hibernacji Chcę wstawić 100 rekordów w bazie danych, załóżmy, że otrzymam wyjątek wsadowy JDBC w 50. wstawieniu rekordu Potrzebuję obsługi wyjątku i muszę utrwalić pozostały rekord do DB.Jak kontynuować wstawianie zbiorcze, gdy wystąpi wyjątek

Kod:

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

dziękuję za odpowiedź, przypuśćmy, że odczyt 100 rekordu z listy, a następnie będę kontynuował używanie elementu entityManager.persist (temp) .. na tej liście jeden rekord nie jest poprawny, więc hibernuj poprzez wyjątek wsadowy JDBC. chcę przechowywać bazę danych, jak mogę to zrobić? – nag

+0

tak .. Ras, potrzebuję złapać wyjątek i rozwieranie, aby przetrwać .Jak to zrobić? – nag

+1

Nigdy nie rób tego 'log.info (" Exception ... "+ e);' ... przechwytuje ślad stosu. Zamiast tego użyj 'log.info (" Exception ... ", e);' z wyjątkiem jako parametr – artbristol

Odpowiedz

0

Nagendra.

To, co mówi pan RAS, jest poprawne.

Na przykład zachowuje się 100 elementów i wyjątek zdarzył się w 50. Encji persist. Masz program obsługi wyjątków, który zadziała, abyś poradził sobie z sytuacją. Pominie bieżący i przetworzy następny.

miejsca dbać następująco:

1- Twój obsługi wyjątków powinno być w pętli, mam nadzieję, że już masz.

2- W celu wyjątku można zapisać encję w innej liście w celu dalszej analizy szczegółów błędu. zrób to w bloku catch wyjątków.

3- Nie jestem pewien, czy korzystasz z menedżera transakcji, czy nie, transakcja musi zachować ostrożność.

-

+0

Rudra jak mogę osiągnąć drugi przypadek, przez powyższy kod tempCustomer list dodany do entity objec (temp), daje wyjątek tylko jeśli instrukcja entityManager.persist (temp), możesz zrobić przykładowy kod dla tego? – nag

0

W 2. przypadku należy usunąć wiersz ...

entityManager.persist (temp);

jak już wiesz, rzuca wyjątek. zachowaj to na liście do dalszej analizy. lepiej umieścić w dowolnej kolejce (ActiveMQ) do Ciebie.

najlepszym rozwiązaniem jest to znowu:

sprawdzić wszystkie dane przed utrzymują ... aby zminimalizować wyjątek. Środowisko wykonawcze potrzebuje ponownego przetworzenia i powinno być ręczne.

+0

Jako ostrzeżenie nie używaj stopek łączących się z witryną lub Twoje odpowiedzi mogą być oznaczone jako spam. –

Powiązane problemy