首页 > 解决方案 > Hibernate + Spring JPA:双向oneToMany触发插入查询两次

问题描述

在 Spring Boot 应用程序中,我有父子实体。父母有很多孩子。Parent 为子列表定义了 oneToMany,而 Child 为 Parent 对象定义了 manyToOne。当我尝试插入时,日志显示每次插入都会触发两次查询。

父类.java

public class Parent {

  @javax.persistence.Id
  @Column(name = "PARENT_ID")
  //sequence generator
  private Long parentId;

  @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
  private List<Child> childs;

//getters and setters
}

子.java

public class Child {

  //constructor

  @javax.persistence.Id
  @Column(name = "CHILD_ID")
  //sequence generator
  private Long childId;

  @Column(name="NAME")
  private String childName;

  @ManyToOne
  @JoinColumn(name="PARENT_ID")
  Parent parent;

  //getters and setters
}

存储库调用

Parent p = new Parent();
List<Child> childs = Arrays.asList(new Child("child1", p), new 
Child("child2", p));
p.setChilds(childs);

//call to save entity
parentRepository.save(p);

当我执行此语句时,我看到 2 个 select 语句,2 个父级插入语句,4 个子级插入语句。我的期望是为父母插入 1 个,为孩子插入 2 个。

这是它应该是这样还是我做错了什么?

标签: hibernatespring-bootjpa

解决方案


推荐阅读