如何解决如何在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 举报,一经查实,本站将立刻删除。