gpt4 book ai didi

java - 很难理解使用 JPA (spring boot) 的关系数据存储

转载 作者:行者123 更新时间:2023-12-02 08:41:28 25 4
gpt4 key购买 nike

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

例如,您有公司员工的职位,并且您希望将新职位保存到数据库中。

您创建 2 个具有 OneToMany 关系的实体 Job 和 Worker(1 个作业用于 3 个或更多 Worker)

当您将作业保存到数据库时,它有一个字段: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;
}

示例: worker

@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,请在 ID 字段上添加 @GenerateValue(strategy = GenerationType.AUTO)

祝你好运

关于java - 很难理解使用 JPA (spring boot) 的关系数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61364438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com