java - 很难理解使用 JPA 存储关系数据(spring boot)
问题描述
我想知道如何将实体存储在数据库中而不存储它的相对关系。
例如,您为公司的员工提供工作,并且您希望将新工作保存到数据库中。
您创建 2 个实体 Job 和 Worker 与 OneToMany 关系(3 个或更多工人的 1 个工作)
当您将作业保存到数据库中时,它具有字段:workers,并且不能为空。
问题:当您将工作保存到数据库时,它的工作人员也被保存了!( jobRepository.save(myJob)
所以每次我添加已经在我的数据库中的新工作人员时,都会再次添加(这当然会破坏应用程序,因为你不能有重复的工作人员)
我该如何解决这个问题?谢谢 !
示例:工作
@Entity
@Table(name = "job")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Job{
@Id
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "job", fetch = FetchType.EAGER)
private Set<Worker> workers;
}
示例:工人
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "workers")
public class User extends DataAudit {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "job_id", referencedColumnName = "id")
private Job job;
}
示例:在数据库中保存作业
Worker worker1 = workerService.getWorkerById(1);
Job job = new Job(1,worker1)
jobRepository.save(job)
给我一个错误----> JdbcSQLIntegrityConstraintViolationException:唯一索引或主键违规
解决方案
为避免重复的 id @GeneratedValue(strategy = GenerationType.AUTO)
,请在 id 字段上添加。
祝你好运