我正在开发Spring Boot + Hibernate应用程序。我想知道如何保存OneToMany关系,包括外键。OneToMany映射不能在Spring Boot + Hibernate中工作
我有2类雇员和地址有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)
private List<Address> addresses = new ArrayList<>();
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
}
@Entity
public class Address {
@Id
@GeneratedValue
private int addressID;
private String city;
private String country;
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "empId")
private Employee employee;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
DAO代码:
@Repository
public class EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
public Employee save(Employee employee) {
Session session = getSession();
session.persist(employee);
return employee;
}
private Session getSession() {
return sessionFactory.getCurrentSession();
}
}
当我试图使用JSON POST请求来保存数据:
{
"name": "Kamal Verma",
"designation": "SAL1",
"addresses": [
{
"city": "Noida",
"country": "India"
}
]
}
它没有任何错误,但在地址表EMPID数据库工作正常一片空白。
请让我知道我在做什么错,因为地址表中的外键没有被保存。
感谢, 卡迈勒
嗨Kishan,非常感谢您的建议。有效。只是想知道后张贴这个问题,我也找到了解决方案,通过更改服务为 公共职员保存(员工雇员){ \t \t设置
addresses = employee.getAddresses(); \t \t(Address address:addresses){ \t \t \t address.setEmployee(employee); \t \t} \t \t return dao.save(employee); \t}所以,想要检查一下什么应该是最好的做法,把它放在Pojo或服务。 –我更喜欢将它放在POJO中,因为它保证Address员工字段将始终设置 - 以防万一您将员工保存在其他地方。 – Kishan