gpt4 book ai didi

java - Spring-boot JPA 实体 OneToOne 添加与父级相关的新子级

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:49 27 4
gpt4 key购买 nike

我无法弄清楚如何简单地将子实体与现有父实体相关联。

@Entity
@Table(name = "parent")
@Document(indexName = "parent")
public class Parent implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

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

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(unique = true)
private Child child;

//getters, setters
}

child

@Entity
@Table(name = "child")
@Document(indexName = "child")
public class Child implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

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

@OneToOne(mappedBy = "child")
private Parent parent;

//getters, setters
}

这是两个基本模型。

父级已存在于数据库中,我想添加一个新的相关子级。

Child childEntity = childRepository.save(child);

子项的填充方式如下:子.json

{
"name": "smallChild",
"parent": { "id" : "1" }
}

我希望能够拯救 child ,并让它自动与 parent 建立联系。

我做了一些非常讨厌的代码...

  1. 保存没有 parent 的 child 的 ID
  2. 通过 ID 查询数据库中的父级
  3. 将子实体设置为父实体
  4. 将父级与新子级一起保存
  5. 将父实体设置为子实体
  6. 与 parent 一起重新拯救 child 。

这最终是 6 左右的数据库查询。

我尝试观看 lynda.com 上的一些类(class)视频,但没有帮助。

谢谢!

最佳答案

需要父主键或完整实体。如果父对象的 ID 可用,则如果目标只是保存,则不需要用于获取父对象的额外查询。

如果您有父实体的 ID,则可以将子实体保存为:

Child child = new Child();
//...
//Setters for child
//...
//Now just create a parent object and set the id to it
Parent p = new Parent();
p.SetId(parentId); // as the parentId is already vailable
child.setParent(p);
Child childEntity = childRepository.save(child);

关于java - Spring-boot JPA 实体 OneToOne 添加与父级相关的新子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732251/

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