我有一个方法:
Session ssn = HibernateSessionManager.getCurrentSession();
Transaction trn = ssn.beginTransaction();
currentActivity = (Activity) ssn.get(Activity.class, currentActivity.getId());
if (currentActivity.getState().equals(ActivityStateEnum.CLOSED_COMPLETED)){
return;
}
currentActivity.setEndTime(getCurrentDate());
currentActivity.setExecutedBy(person.getLogin());
currentActivity.setServerIP(getServerIP());
currentActivity.setState(ActivityStateEnum.CLOSED_COMPLETED);
ssn.saveOrUpdate(currentActivity);
ssn.flush();
trn.commit();
它从两个不同的线程开始,它们同时获取相同的Activity对象,进行更改并更新它。如果它们在相同的毫秒内启动,我正在等待回滚,因为它们无法同时进行更改。
我只希望其中一个进行此提交,并回滚或返回另一个。但他们做了两次提交。