2012-10-30 4 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)를 사용하여 계속 사용합니다. 목록에서 하나의 레코드가 적절하지 않으므로 JDBC 배치 예외를 통해 최대 절전 모드로 전환됩니다. 나는 데이터베이스를 저장하고 싶습니다. 어떻게 할 수 있습니까? – nag

+0

예 .. 라스, 예외를 찾아 내고 지속적으로 리밍해야합니다. 어떻게 할 수 있습니까? – nag

+1

'log.info ("Exception ..."+ e);'... 스택 추적을 삼킨다. 대신 log.info ("Exception ...", e);를 매개 변수로 사용하여 예외 – artbristol

답변

0

Nagendra.

RAS가 말한 것은 정확합니다.

예를 들어 100 개의 엔티티를 유지하고 있으며 50 번째 엔티티에서 예외가 발생했습니다. 예외 처리기를 사용하면 상황을 처리 할 수 ​​있습니다. 현재 파일을 건너 뛰고 다음 파일을 처리합니다.

1 귀하의 예외 처리 루프 내에 있어야합니다, 당신은 이미 그것을 가지고 희망 :

상황이 다음과 같이 돌봐.

2 예외의 경우 오류 목록에 대한 자세한 분석을 위해 다른 목록에 엔티티를 저장할 수 있습니다. 예외 catch 블록에서 수행하십시오.

3 트랜잭션 관리자를 사용하고 있는지 여부를 잘 모르겠습니다. 트랜잭션을 처리해야합니다. ; 2의 경우 행을 제거하십시오에서

+0

Rudra 어떻게 위의 코드에 의해 tempCustomer 목록이 엔티티 objec (temp)에 추가 된 두 번째 경우를 얻을 수 있습니까? entityManager.persist (temp) 문이있을 때만이 예제 코드를 만들 수 있습니까? – nag

0

...

entityManager.persist (임시) -

이미 알고있는 것처럼 예외입니다. 귀하의 추가 분석을 위해 그것을 목록에 보관하십시오. 어떤 대기열 (ActiveMQ)에 넣어도됩니다. 이것에 대한

가장 좋은 방법은 또 있습니다 :

검증 모든 데이터 이전 ... 계속 예외를 최소화 할 수 있습니다. 런타임에는 다시 처리가 필요하며 이는 수동이어야합니다.

+0

경고로, 귀하의 웹 사이트로 연결되는 꼬리말을 사용하지 마십시오. 그렇지 않으면 답변이 스팸으로 표시 될 수 있습니다. –

관련 문제