Java 难以理解使用JPA(spring boot)存储关系数据

Java 难以理解使用JPA(spring boot)存储关系数据,java,sql,hibernate,spring-boot,jpa,Java,Sql,Hibernate,Spring Boot,Jpa,我想知道如何在数据库中存储实体,而不存储它的相对属性 例如,您的公司中有员工的工作,您希望将新工作保存到数据库中 您创建了两个具有“一个多工”关系的实体“工”和“工”(1个工对应3个或更多工) 将作业保存到数据库中时,它有字段:workers,并且不能为null 问题:当您将作业保存到数据库中时,它的工作人员也会被保存!(jobRepository.save(myJob) 所以每次我添加新的工作人员时,我的数据库中已经存在的工作人员都会再次被添加(当然,这会中断应用程序,因为您不能有重复的工作人

我想知道如何在数据库中存储实体,而不存储它的相对属性

例如,您的公司中有员工的工作,您希望将新工作保存到数据库中

您创建了两个具有“一个多工”关系的实体“工”和“工”(1个工对应3个或更多工)

将作业保存到数据库中时,它有字段:workers,并且不能为null

问题:当您将作业保存到数据库中时,它的工作人员也会被保存!(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;
}
示例:在数据库中保存作业

Worker worker1 = workerService.getWorkerById(1);
Job job = new Job(1,worker1)

jobRepository.save(job)

给我一个错误-->JdbcSQLIntegrityConstraintViolationException:唯一索引或主键冲突

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


祝你好运

你必须显示你的代码。否则很难推断出你做错了什么。我添加了一些示例代码:)你可以尝试的一件事是,对于工作人员,你可以将级联设置为所有,以确保它应用了更新之类的更改。现在它给我这个错误:乐观锁定失败;嵌套异常为org.hibernate.StaleObjectStateException:行已由另一个transactionUser或Worker更新或删除??谢谢,但它仍将Worker添加到数据库中。我不希望每个新作业都有重复的工作人员:)您可以尝试
@PrePersist
@PreUpdate
并手动管理ID。
Worker worker1 = workerService.getWorkerById(1);
Job job = new Job(1,worker1)

jobRepository.save(job)