JPA Hibernate - 如何 (REST api) POST 使用外键作为 ID 的对象?

JPA Hibernate - how to (REST api) POST object with foreign key as ID?

我有两个具有一对多映射的实体。现在,我想向数据库添加新对象(具有部门外键的新员工)。

最简单的方法是什么?

这就是实体的样子:

@Entity
public class Employee {
    ...
    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "department_id", nullable = true)
    private Department department;
}

@Entity
public class Department {
    ...
    @OneToMany(mappedBy = "department", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonBackReference
    private Set<Employee> employees;
}

目标是通过这种json:

{
    "surname": "smith",
    "department": 1
}

故障保护策略

  • 按姓氏搜索员工:smith。如果不存在,return 一个 json 消息:“smith 用户不存在”和 http 状态:400(错误请求)
  • 按 ID 搜索部门:1. 如果不存在,return json 消息:“部门不存在”和 http 状态:400(错误请求)
  • 如果前面的句子没有问题,您将有一个 Employee 和 Department 的实例,可以使用
    Employee emp = employeeRepository.findBySurname("smith");
    //if emp does not exist, instance a new one
    Department dep = employeeRepository.findBySurname("smith");
    emp.setDepartment(dep);
    employeeRepository.save(emp);
  • Hibernate 和 jpa 必须保留您的简单实体

直接攻略

  • 使用 smith 姓氏实例化您的员工
  • 使用 id 实例化您的部门:1
  • 在员工实例中设置你的部门实例
  • 执行employeeRepository.save(emp);
  • 使用 try catch 来 return 一个 json 消息以防出现错误:“员工被持久化时发生内部错误...”