关于 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 对象结构看起来都与我概述的完全一样。