当前位置: 首页 > 知识库问答 >
问题:

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

仉磊
2023-03-14

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

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

你创建2个实体工作和工人与OneTo多关系(1个工作为3个或更多的工人)

当您将作业保存到数据库时,它有字段:工人,并且不能为空。

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

给我一个错误----

共有1个答案

徐鸿文
2023-03-14

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

祝你好运

 类似资料:
  • 我正在开发一个迁移软件,它将使用来自REST服务的未知数据。 我已经考虑过使用MongoDB,但我决定不使用它,而是使用PostgreSQL。 读完本文后,我试图在我的SpringBoot应用程序中使用SpringJPA实现它,但我不知道在我的实体中映射。 我试过了,但什么也不懂! 这里就是我所在的地方: 和... 下表: 我该怎么做? 注意:我不想/不需要一个实体来工作。我的JSON将永远是St

  • 我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制

  • 问题内容: 我想知道是否可以使用批注使用JPA2 将地图持久化到以下类中 由于我们已经有一个现有的生产数据库,因此理想情况下,值 可以映射到以下现有表: 问题答案: JPA 2.0通过注释可以支持原语集合,你可以将其与集合支持一起使用。这样的事情应该起作用: 另请参见(在JPA 2.0规范中) 2.6 - Collections of Embeddable Classes and Basic Ty

  • 问题内容: 我正在尝试为视图创建JPA实体。在数据库层中,表和视图应该相同。 但是,问题开始出现并且有两个方面: 尝试设置正确的注释时。视图没有与之关联的主键,但是如果没有对字段进行适当的注释,则会在运行时引发抛出异常。 Spring Boot 接口定义要求类型为extends ,这避免了由于视图实体上缺少ID 而不能用作替代方法。 与缺少主键的视图进行交互的正确JPA / SpringBoot

  • 第二个存储区是。它的责任是管理随机选择的TODO项目。在我看来,应该使用通过访问TODO项。 问题在于,如前所述,在启动时不会加载TODO项。 问题是:“如何保证已经检索了TODO项?”

  • 当我想使用带有< code > @ EnableJpaRepositories(base package classes = userdao . class)注释的自动生成的jpa存储库时,我得到以下错误。 这是界面: 这是它实现的自定义接口: 这个自定义接口是在具体的类UserDaoImpl中实现的(spring应该通过查找interfacename后缀Impl来选择这个类 我该怎么办?我是否也