在Hibernate中进行插入以进行OneToMany映射。相同的数据被插入两次。
员工:
@Entity
public class Employee {
@Id
@GeneratedValue
private int empId;
private String name;
private String designation;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee", fetch = FetchType.EAGER, orphanRemoval = true)
private Set<Address> addresses = new HashSet<>();
}
地址:
@Entity
public class Address {
@Id
@GeneratedValue
private int addressID;
private String city;
private String country;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "empId")
@JsonIgnore
private Employee employee;
}
当我使用POST请求保存数据时: 保存第一名员工的请求:
{
"name": "Test1",
"designation": "SAL1",
"addresses": [
{
"city": "Delhi",
"country": "India"
},
{
"city": "Noida",
"country": "India"
}
]
}
保存第二名员工的请求:
{
"name": "Test2",
"designation": "SAL2",
"addresses": [
{
"city": "Delhi",
"country": "India"
},
{
"city": "Noida",
"country": "India"
}
]
}
在这种情况下,地址表中包含4个条目,分别为Noida:印度和德里:印度。
我想了解每种地址数据只有1个条目的最佳方法是什么,即诺伊达为1:印度为1,德里为1:
答案 0 :(得分:0)
创建一个存储位置条目的单独表。这张表的关键是“国家”和“城市”的复合键。然后,创建一个单独的地址表,其中包含“user”的外键列以及包含国家和城市的表。