我正在尝试跟踪任务的启动和完成时间。我想根据任务状态何时更改来自动设置日期。这是代码:
@RequestMapping(value = "/save/task")
public String addTask(@ModelAttribute(value="task")Task task){
Task taskBeforeUpdate=taskRepository.findById(task.getId());
task.setTime(LocalDateTime.now());
if ((taskBeforeUpdate.getCompletedDate()==null) && (taskBeforeUpdate.getStatus().equalsIgnoreCase("In Progress")) &&(task.getStatus().equalsIgnoreCase("completed"))){
task.setCompletedDate(LocalDateTime.now());
}
else if ((taskBeforeUpdate.getStatus().equals("New, Not Yet Started") ) && (task.getStatus().equalsIgnoreCase("In Progress"))){
task.setInProgressDate(LocalDateTime.now());
}
taskRepository.save(task);
return "redirect:/client/tasks/"+task.getClient().getId();
}
说任务是“进行中”,并且有一个最初设置为该日期的进行中日期,当我更改为“已完成”时,进行中日期则更改为NULL。我想在我的sql数据库中保留进行中的日期。更改状态后,如何防止其自动删除该日期?
这可以解决此问题,但随后会导致其他未“交换”的字段出现其他问题:
@RequestMapping(value = "/save/task")
public String addTask(@ModelAttribute(value="task")Task task){
Task taskBeforeUpdate=taskRepository.findById(task.getId());
task.setTime(LocalDateTime.now());
if ((taskBeforeUpdate.getCompletedDate()==null) && (taskBeforeUpdate.getStatus().equalsIgnoreCase("In Progress")) &&(task.getStatus().equalsIgnoreCase("completed"))){
task.setCompletedDate(LocalDateTime.now());
taskBeforeUpdate.setCompletedDate(task.getCompletedDate());
taskBeforeUpdate.setStatus(task.getStatus());
}
else if ((taskBeforeUpdate.getStatus().equalsIgnoreCase("New, Not Yet Started") ) && (task.getStatus().equalsIgnoreCase("In Progress"))){
task.setInProgressDate(LocalDateTime.now());
taskBeforeUpdate.setInProgressDate(task.getInProgressDate());
taskBeforeUpdate.setStatus(task.getStatus());
}else{
taskRepository.save(task);
}
taskRepository.save(taskBeforeUpdate);
return "redirect:/client/tasks/"+task.getClient().getId();
}
答案 0 :(得分:1)
您从数据库“ taskBeforeUpdate”获得的任务具有所有值,而参数“任务”仅具有来自客户端的值。您应该将新值从task复制到taskBeforeUpdate,然后将taskBeforeUpdate保存在数据库中。
答案 1 :(得分:1)
正如Aman Garg所说,您需要将新值复制到旧值,并仅保存旧值。在您的解决方案中,我可以看到您正在保存任务(在else块中),然后保存taskBeforeUpdate,这根本不是必需的,并且会造成问题。