使用 Spring Data JPA 更新@ManyToOne 关系中的字段

问题描述 投票:0回答:0

我正在尝试更改任务状态(数据库中有 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);
        }
    }
}

我在类似的帖子中寻找解决方案,但没有任何帮助

java spring-boot spring-data-jpa spring-data-rest
© www.soinside.com 2019 - 2024. All rights reserved.