关于 spring 引导 java 中实体的问题
Question about entities in spring boot java
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 link 对象,一切正常。但是现在我有一个对象数组,我很难弄清楚如何 link 将 Address 数组
添加到 Employee 对象
@ManyToOne 约束意味着 单一 关系 拥有 映射。如果你想在所有者端关联多个对象,那么你真的需要反向注释(即 @OneToMany),我个人总是倾向于将该注释与 List 或 Set 实现相关联(任何一个都可以)。因此,您的成员变量声明如下所示:
@NotNull
@OneToMany
private Set<Address> addresses;
通过这种方式,您可以将 Employee 实例传递给 Address 实例的列表(在本例中为 Set),并假设您启用了 update/insert 级联(以及 GeneratedId),集合中的每个地址持久化父Employee实例时会自动分配id。
回答您的后续问题:
从客户端创建 json post 只涉及 将地址对象数组嵌入父 JSON 对象 ,例如:
{
"generalDetails": 1,
"spouse": 2,
"addresses": [{
"street": "streetVal1",
"town": "townVal1",
"postCode": "pcVal1"
},
{
"street": "streetVal2",
"town": "townVal2",
"postCode": "pcVal2"
}]
}
您会注意到我没有在地址对象上指定 Id 字段,这将在服务器端处理,如前所述 new 地址。对于更新,您当然会向每个地址对象添加 id 字段。在任何情况下,JSON 对象结构看起来都与我概述的完全一样。
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 link 对象,一切正常。但是现在我有一个对象数组,我很难弄清楚如何 link 将 Address 数组
添加到 Employee 对象@ManyToOne 约束意味着 单一 关系 拥有 映射。如果你想在所有者端关联多个对象,那么你真的需要反向注释(即 @OneToMany),我个人总是倾向于将该注释与 List 或 Set 实现相关联(任何一个都可以)。因此,您的成员变量声明如下所示:
@NotNull
@OneToMany
private Set<Address> addresses;
通过这种方式,您可以将 Employee 实例传递给 Address 实例的列表(在本例中为 Set),并假设您启用了 update/insert 级联(以及 GeneratedId),集合中的每个地址持久化父Employee实例时会自动分配id。
回答您的后续问题:
从客户端创建 json post 只涉及 将地址对象数组嵌入父 JSON 对象 ,例如:
{
"generalDetails": 1,
"spouse": 2,
"addresses": [{
"street": "streetVal1",
"town": "townVal1",
"postCode": "pcVal1"
},
{
"street": "streetVal2",
"town": "townVal2",
"postCode": "pcVal2"
}]
}
您会注意到我没有在地址对象上指定 Id 字段,这将在服务器端处理,如前所述 new 地址。对于更新,您当然会向每个地址对象添加 id 字段。在任何情况下,JSON 对象结构看起来都与我概述的完全一样。