hibernate中OneToMany映射的重复数据

时间:2017-04-26 06:00:31

标签: java hibernate

在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:

1 个答案:

答案 0 :(得分:0)

创建一个存储位置条目的单独表。这张表的关键是“国家”和“城市”的复合键。然后,创建一个单独的地址表,其中包含“user”的外键列以及包含国家和城市的表。