2016-08-24 1 views
1

데이터베이스 테이블에 저장해야하는 DTO 클래스 목록이 있습니다. 내가 추적 할 수없는 몇 가지 알려지지 않은 이유 때문에 마지막 항목 만 데이터베이스에 저장됩니다.최대 절전 모드 트랜잭션 : 목록의 마지막 항목 만 테이블에 저장됩니다.

샘플 서비스 및 관리자 클래스 아래

찾기,

class TestService { 

public void saveData(List<OrderDTO> dtolist) { 
//exception handling properly 
transaction.begin(); 
manager.saveAlldata(dtolist); 
transaction.commit(); 
} 
} 

Class TestManager { 
public void saveAlldata(List<OrderDTO> dtolist) { 
//exception handles properly 
for(OrderDTO dto: dtolist){ 
    OrderPersist persist = new OrderPersistent(); 
    persist.setId(dto.getId()); 
    persist.setItem(dto.getItem()); 
//save(persist) or merge(persist); 
    } 
} 

내가 예를 들어,이 개 항목의 세부 사항이 있다고 가정 id = 1, Item = S_001 및 Id = 2, Item = S_002 dto 목록에서 마지막 항목 (2, S_002) 만 테이블에 저장됩니다.

답변

0

for 루프 내부에 session.save이 필요합니다.

for(OrderDTO dto: dtolist){ 
    OrderPersist persist = new OrderPersistent(); 
    persist.setId(dto.getId()); 
    persist.setItem(dto.getItem()); 
    session.save(persist); 
} 

또한 카운트 유지를 고려하고 카운터를 사용할 수 있습니다. 다음과 같은 내용이 있습니다.

if(i % 50 == 0) { 
    session.flush(); 
    session.clear(); 
} 

여기서 i는 개수입니다.

+0

이 첫 번째 부분은 설명한 것과 동일합니다. Save = session.Save(), merge = entityManager.merge(); 두 번째 부분을 시도합니다. – Bibhaw

1

시도해 보셨습니까?

public void saveAlldata(List<OrderDTO> dtolist) { 
//exception handles properly 
for(OrderDTO dto: dtolist){ 
transaction.begin(); 
OrderPersist persist = new OrderPersistent(); 
persist.setId(dto.getId()); 
persist.setItem(dto.getItem()); 
//save(persist) or merge(persist); 
transaction.commit(); 
} 
}