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 消息以防出现错误:“员工被持久化时发生内部错误...”
我有两个具有一对多映射的实体。现在,我想向数据库添加新对象(具有部门外键的新员工)。
最简单的方法是什么?
这就是实体的样子:
@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 消息以防出现错误:“员工被持久化时发生内部错误...”