2013-06-18 5 views
0

최대 절전 모드 일괄 삽입을 사용하는 파일에서 100 개 레코드를 삽입하려고합니다. 트랜잭션 내에서 로직을 래핑하면 예상대로 작동 할 것입니다. 예를 들어 배치 3 개 생성 중입니다. 300 개의 레코드 중 하나를 선택하고 트랜잭션 내에서 로직을 래핑하면 세 번째 일괄 처리에 문제가 발생하면 트랜잭션이 1 번째 및 2 번째 롤백으로 롤백됩니다.트랜잭션 내에서 다중 배치 삽입

답변

2

항상 트랜잭션에서 배치를 래핑하십시오. 트랜잭션 당 100 개의 삽입을 일괄 처리하는 경우 모든 항목이 정상이면 모든 항목이 커밋됩니다. 또한 일괄 처리 삽입 속도를 높이기 위해 무국적 세션을 사용하는 것이 좋습니다. Hibernate 문서의 Batch processing 튜토리얼을 읽어보기를 강력히 추천한다.

+0

내가 하나의 트랜잭션의 모든 배치를 포장 할 수 있습니다. – cooper

+0

난 그냥 provoded 내 링크를 통해 갔고 내 최대 절전 모드 pojo 복잡한 개체의 그래프를 가지고 있으며, 그래서 내가 내가 그런 경우에 상태없는 세션을 사용할 수 없다는 것을 발견했다. 내가 틀렸다면. – cooper

+0

@cooper 올바르지 않습니다. 최대 절전 모드가 필요하지 않은 pojos를 더티 체크하려고 할 때 (내가 읽은 것에서) 귀하의 경우에 상태 보존 세션이 필요합니다. 먼지를 관리하면 메모리 및 성능면에서 추가 오버 헤드가 발생합니다. –

0

요약하면 예상대로 작동합니다.

Hibernate에서 각 일괄 처리 삽입이 별도의 트랜잭션에 있어야한다는 제한은 없다. 하나의 트랜잭션에서 여러 배치 삽입을 수행하면 전체적으로 커밋되거나 롤백됩니다.

는 (물론, 당신이 거래 또는 거래의 이정표를 사용하여 중첩 된 경우 또 다른 이야기입니다.)

관련 문제