关于spring boot java中实体的问题
Posted
技术标签:
【中文标题】关于spring boot java中实体的问题【英文标题】:Question about entities in spring boot java 【发布时间】:2022-01-17 09:25:20 【问题描述】:package net.employee_managment.springboot.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
@Entity
@Table(name = "employee")
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee
@Id
@Column(name="employee_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int employee_id;
@NotNull
@ManyToOne
@JoinColumn(name="general_details_id", nullable = false)
private GeneralDetails generalDetails;
@NotNull
@ManyToOne
@JoinColumn(name="spouse_id", nullable = false)
private Spouse spouse;
@NotNull
@ManyToOne
@JoinColumn(name="address_Id")
private Address[] addresses;
@NotNull
@ManyToOne
@JoinColumn(name="child_ID")
private Child[] children;
.... Constractors, Gettes, Setters
到目前为止,我可以使用 Employee 对象中的对象 ID 来链接对象,并且一切正常。但是现在我有一个对象数组,我很难弄清楚如何将 Address 数组链接到 Employee 对象
【问题讨论】:
【参考方案1】:@ManyToOne 约束意味着拥有映射的一方存在单一关系。如果您想在所有者方面关联多个对象,那么您确实需要反向注释(即 @OneToMany),我个人总是倾向于将该注释与 List 或 Set 实现相关联(任何都可以)。因此,您的成员变量声明如下所示:
@NotNull
@OneToMany
private Set<Address> addresses;
通过这种方式,您可以将您的 Employee 实例传递给 Address 实例的列表(或在本例中为 Set),并且如果您启用了更新/插入级联(以及 GeneratedId),则集合中的每个地址都将被自动分配父Employee实例持久化时的id。
回答您的后续问题:
从客户端创建 json 帖子只需将地址对象数组嵌入到父 JSON 对象中,例如:
"generalDetails": 1,
"spouse": 2,
"addresses": [
"street": "streetVal1",
"town": "townVal1",
"postCode": "pcVal1"
,
"street": "streetVal2",
"town": "townVal2",
"postCode": "pcVal2"
]
您会注意到,我没有在地址对象上指定 Id 字段,这将在服务器端处理,如前所述 new 地址。对于更新,您当然可以将 id 字段添加到每个地址对象。在任何情况下,JSON 对象结构看起来都与我概述的完全一样。
【讨论】:
非常感谢您的详细回答:)。我不明白的另一件事是我如何创建员工帖子,因为我使用了对象的 id,例如: "generalDetails": 1, "spouse": 2, "addresses":?, "children":? @MichaelFisher 我已更新我的答案以解决您关于将对象发布到服务器的后续问题。如果我的回答对您有所帮助,请点击相应按钮接受。提前致谢。以上是关于关于spring boot java中实体的问题的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体
如何在 Spring Boot 应用程序中将 java lang long 转换为实体类
Spring Boot配置Mysql后无法根据java实体类生成table
如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中