2014-06-20 2 views
0

나는 그런 서비스가 있습니다일괄 처리를 실행하는 예외입니다. 봄 응용 프로그램

@Service 
public class UserEventServiceImpl implements UserEventService { 
@Autowired 
UserEventDao userEventDao; 

@Override 
public UserEvent getOrCreateUserEvent(String guid) { 
    return userEventDao.getOrCreateUserEvent(guid); 
} 

@Override 
public void updateUserEvent(UserEvent userEvent) { 
    userEventDao.update(userEvent); 
} 

@Override 
public void processEventType(String guid, EventType type) { 
    UserEvent userEvent = getOrCreateUserEvent(guid); 
    switch (type) { 
     case DOWNLOAD_STARTED: { 
      userEvent.setDownloadInstallStarted(new Date()); 
      updateUserEvent(userEvent); 
      break; 
     } 
     case DOWNLOAD_COMPLETE: { 
      userEvent.setDownloadInstallCompleted(new Date()); 
      updateUserEvent(userEvent); 
      break; 
     } 
     case UPDATE_DOWNLOAD_STARTED: { 
      userEvent.setDownloadUpdateStarted(new Date()); 
      updateUserEvent(userEvent); 
      break; 
     } 
     case UPDATE_DOWNLOAD_FINISHED: { 
      userEvent.setDownloadUpdateCompleted(new Date()); 
      updateUserEvent(userEvent); 
      break; 
     } 
     case UPDATE_COMPLETE: { 
      userEvent.setUpdateCompleted(true); 
      updateUserEvent(userEvent); 
      break; 
     } 
    } 
} 

}

및 DAO 클래스 :

@Repository 
public class UserEventDaoHb extends BaseDaoHb<UserEvent> implements UserEventDao { 

public UserEventDaoHb() { 
    super(UserEvent.class); 
} 

@Override 
public UserEvent getOrCreateUserEvent(String guid) { 
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
    Date date = new Date(); 
    try { 
     date = formatter.parse(formatter.format(date)); 
    } catch (ParseException e) { 
     //do nothing. Impossible to happen 
    } 
    UserEvent event = findOneByParams(Restrictions.eq("guid", guid), Restrictions.eq("date", date)); 
    if (event == null) { 
     event = new UserEvent(); 
     event.setGuid(guid); 
     event.setDate(date); 
     getHibernateTemplate().save(event); 
     getHibernateTemplate().flush(); 

    } 
    return event; 
} 

}

UserEvent에 간단한 POJO 객체입니다. 이 코드는 로컬 및 테스트 서버에서 완벽하게 작동하지만 내가 생산에 그것을 실행할 때 같은 예외가 발생합니다

오류를 [HTTP 4 월-8080-간부-55] - 2014년 6월 20일 7시 27분 : 14 - (BatchingBatcher.java:73) - 예외 실행 일괄 처리 : org.hibernate.StaleStateException : 일괄 업데이트가 update [0]의 예기치 않은 행 수를 반환했습니다. 실제 행 수 : 0; 예상 : 1

제가 알기로 UserEvent는 업데이트가 있어야 할 때 DB에 아직 존재하지 않기 때문에 발생합니다. 해결 방법이 있습니까?

답변

0

나는 getOrCreateUserEvent() 방법 @Transactional 주석을 추가하는 것을 잊지.

관련 문제