首页 > 解决方案 > 很难理解使用 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:唯一索引或主键违规

标签: javasqlhibernatespring-bootjpa

解决方案


为避免重复的 id @GeneratedValue(strategy = GenerationType.AUTO),请在 id 字段上添加。

祝你好运


推荐阅读