简体   繁体   English

异常执行批处理。 春季申请

[英]Exception executing batch. Spring application

I have such service: 我有这样的服务:

@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;
        }
    }
}

} }

And such dao class: 而这样的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 is a simple POJO object. UserEvent是一个简单的POJO对象。 This code works perfectly at local and test server but when i run it at production it causes such exception: 这段代码在本地服务器和测试服务器上运行良好,但是当我在生产环境中运行它时,会导致此类异常:

ERROR [http-apr-8080-exec-55] - 2014-06-20 07:27:14 - (BatchingBatcher.java:73) - Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; 错误[http-apr-8080-exec-55]-2014-06-20 07:27:14-(BatchingBatcher.java:73)-执行批处理的异常:org.hibernate.StaleStateException:批处理更新从更新返回意外行数[0]; actual row count: 0; 实际行数:0; expected: 1 预期:1

As i understand, it happen because UserEvent does not exists yet in DB when its update should be. 据我了解,发生这种情况是因为应该更新UserEvent在DB中尚不存在。 Have any ideas how to fix it? 有任何解决办法吗?

我忘记将@Transactional批注添加到getOrCreateUserEvent()方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM