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 物件
uj5u.com熱心網友回復:
@ManyToOne 約束意味著擁有映射的一方的單一關系。如果你想在所有者端關聯多個物件,那么你真的需要反向注釋(即@OneToMany),我個人總是傾向于將該注釋與 List 或 Set 實作相關聯(任何都可以)。因此,您的成員變數宣告如下所示:
@NotNull
@OneToMany
private Set<Address> addresses;
通過這種方式,您可以向您的 Employee 實體傳遞一個 Address 實體的 List(或 Set 在這種情況下),并提供您啟用了更新/插入級聯(以及 GeneratedId 的),集合中的每個地址將在父 Employee 實體被持久化。
要回答您的后續問題:
從客戶端創建 json 帖子只涉及在父 JSON 物件中嵌入地址物件陣列,例如:
{
"generalDetails": 1,
"spouse": 2,
"addresses": [{
"street": "streetVal1",
"town": "townVal1",
"postCode": "pcVal1"
},
{
"street": "streetVal2",
"town": "townVal2",
"postCode": "pcVal2"
}]
}
您會注意到我沒有在地址物件上指定和 Id 欄位,這將在服務器端處理,如前面提到的新地址。對于更新,您當然可以將 id 欄位添加到每個地址物件。無論如何,JSON 物件結構看起來與我概述的完全一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382047.html
