我正在尝试更改任务状态(数据库中有 3 个永久任务:待办、进行中、完成)。 我尝试使用 Spring Data JPA 的内置 REST 和补丁方法,但它不起作用
下一步是手动执行逻辑:
TaskServiceImpl
@Service
@AllArgsConstructor
public class TaskServiceImpl {
private TaskRepository taskRepository;
private StatusRepository statusRepository;
@Transactional
public Task updateTaskStatus(int taskId,int statusId){
Task task=taskRepository.findById(taskId).orElseThrow(() -> new ResourceNotFoundException("Task not found"));
Status status=statusRepository.findById(statusId).orElseThrow(() -> new ResourceNotFoundException("Status not found"));
task.setStatus(status);
taskRepository.save(task);
return task;
}
}
任务控制器
@RestController
@RequestMapping("/api/tasks")
@AllArgsConstructor
@CrossOrigin(origins = "http://localhost:4200")
public class TaskController {
private final TaskServiceImpl taskService;
@PatchMapping("/update/{id}")
public ResponseEntity<Task> updateTaskStatus(@PathVariable("id") int id, @RequestBody Map<String, Integer> status) {
taskService.updateTaskStatus(id, status.get("status"));
return ResponseEntity.ok().build();
}
}
但任务仍然没有改变状态。
任务实体
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table
@Getter
@Setter
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "project_id", nullable = false)
private Project project;
@ManyToOne
@JoinColumn(name = "status_id", nullable = false)
private Status status;
}
状态实体
package com.example.todo.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table
@Getter
@Setter
public class Status {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "status",cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Set<Task> tasks=new HashSet<>();
public void addTask(Task task){
if(task!=null){
if(tasks==null) tasks=new HashSet<>();
tasks.add(task);
task.setStatus(this);
}
}
}
我在类似的帖子中寻找解决方案,但没有任何帮助