java - 如何在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);
}
有没有更好的方法来做到这一点?
解决方案
原来问题是我关系的拥有方。我正在保存更新我的 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();
推荐阅读
- c++ - lib_alsa 无法访问文件
- swift - 如何在 SwiftUI 中更改 DatePicker 字体粗细
- ios - App Store 允许基于 IOS Webview 的应用程序?
- python - 打印对象列表时为 _repr_ 方法定义不同的输出
- graphql - AWS Amplify with GraphQL - 按不同类型的用户定义身份验证规则
- logging - 将 Tomcat 9 servlet 异常日志重定向到 log4j2
- hibernate - Hibernate:调整多个@OneToMany和ManyToOne
- kubernetes - 跨多个 Kubernetes 集群的基于上下文的路由
- java - SurfaceHolder.Callback 和 SurfaceCreated(SurfaceHolder holder)
- node.js - 无法从 /api/v1/access_token 获取 reddit 身份验证令牌