微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在springboot中更新实体的内部对象

如何解决如何在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);
    }

当我在控制器中点击 applicants/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);
}

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

解决方法

事实证明问题出在我关系的拥有方。我正在保存更新我的 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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。