0
在Hibernate中为OneToMany映射进行插入操作。相同的数据插入两次。在休眠状态下为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个条目2,分别为诺伊达:印度和德里:印度。
我想了解每个地址数据只有1个条目的最佳方式,即1个用于Noida:印度,1个用于Delhi:India。
检查您的请求是否被发送两次。 –
不,我给两个不同的雇员发送两次,但我想如果我们已经有地址表中的地址它应该映射到,而不是在地址表中创建一个新的行。 –
然后你需要创建一个包含国家和城市的组合键。看看复合键 –