我能够在SO上找到与此主题相关的一些帖子,但我无法找到与我的需求相关的帖子。
我在网站上使用Spring MVC + JPA(Hibernate)。在控制器中:
@RequestMapping(value="deleteMyRecord", method = RequestMethod.GET)
public void deleteQuestionAndUpdateLaterQuestions(HttpServletRequest request,
@RequestParam(value = "id", required = true) Long qid,
Model model, Map<String, Object> map) {
myService.deleteMyRecord(id);
}
服务层方法:
@Override
public void deleteMyRecord(Long id) {
myRecordRepository.delete(id); //using Spring Data
}
只有SOMETIMES,对myService.deleteMyRecord(id)
的调用会生成StaleObjectStateException。我努力了,终于发现它是怎么回事。这是这样的:当网站很慢时,用户可能会不耐烦并单击删除按钮两次。当两个请求都到达服务层并且第一个请求尚未完成删除记录时,第二个请求在第一个请求调用它之后调用myService.deleteMyRecord(id)
时会发生此异常。
我正在寻找解决方案。在客户端,我可以在单击后禁用删除按钮。我可以在服务层或控制器中做些什么来防止此异常?
谢谢!