首页 > 解决方案 > 如何在springboot中更新实体的内部对象

问题描述

我对 springboot 比较陌生,我有一个场景。我有用户,我有工作。一个用户可以申请多个职位,一个职位可以被多个用户申请。我有双向关系的职​​位和用户实体如下

@ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "job_applications")
    @JsonBackReference
    private Collection<JobApplicant> applicants= new ArrayList<>();

@ManyToMany(mappedBy = "applicants",fetch = FetchType.LAZY)
     @JsonManagedReference
    private Collection<Job> jobs= new ArrayList();

我想以编程方式将用户与工作相关联的挑战,这就是我在我的服务类中尝试的

public void addJobToUserJobList(int useId,int jobId) {
        Job job=jobRepository.getOne(jobId);
        System.out.println("Job found: "+job.getName());
        JobApplicant applicant= applicantRepo.getOne(useId);
        Set<Job>jobslist= new HashSet();
        jobslist.add(job);
        applicant.setJobs(jobslist);
        applicantRepo.save(applicant);
        jobRepository.save(job);
    }

当我在控制器中点击申请者/1/25端点时,连接表不会更新。

@RequestMapping(value = "/applicants/{userid}/{jobId}", method = { RequestMethod.PUT, 
RequestMethod.GET })
public void applyToJob(@PathVariable int userid,@PathVariable int jobId) {
        jobService.addJobToUserJobList(userid, jobId);
}

有没有更好的方法来做到这一点?

标签: javaspring-bootspring-data-jpa

解决方案


原来问题是我关系的拥有方。我正在保存更新我的 jobApplicant 实体,该实体不是拥有方,因此它无法更新连接表。我使实体成为拥有方,它的工作方式如下

@ManyToMany(mappedBy = "jobs",cascade = CascadeType.ALL)
    @JoinTable(name = "job_applications")
    @JsonBackReference
    private Collection<JobApplicant> applicants= new ArrayList<>();

@ManyToMany(fetch = FetchType.LAZY)
     @JsonManagedReference
    private Collection<Job> jobs= new ArrayList();

推荐阅读