我有一个
公司表
部门表
员工表。
我正在使用 hibernate 将数据保存在数据库中。
<强>1。公司与部门之间的一对多关系。
一家公司可以有多个部门,一个部门可以有多名员工。
我已经完成了相应的一对多实体映射,如下面的代码中所述。更新这些实体的请求来自 JSON 格式的 UI。
我已在请求中提供了公司 ID、部门 ID 和员工 ID。 现在假设对于某一特定公司,数据库中有一个部门的 dept_id 为 3。 。在 Json 请求中,我收到一项请求,要求更新该特定公司的另一个部门。因此,更新后,以前的条目应保持原样,即 ID 为 3 的部门应保持不变,新条目应添加一些部门 ID,例如 4。
现在该公司将有两个部门,一个部门的 ID 为 3,另一个部门的 ID 为 4。
如何实现这一点?..请求中不存在的部门条目也应从数据库中删除...员工和部门之间的关系也是如此,请求可能会要求添加新的特定部门的员工,保留现有员工。
请帮我解决这个问题,必须在我的代码中完成什么配置/方法才能实现此目的。 这是这三个表的代码:
@Entity
@Table(name = "COMPANY")
@Getter
@Setter
public class Company implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "company_id")
private long companyId;
@Column(name = "company_region")
private String companayRegion;
@Column(name = "company_code")
private String companyCode;
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
private List<department> departments;
public Company() {
}
}
@Entity
@Table(name = "Department")
@Getter
@Setter
public class Department implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "dept_id")
private long departmentID;
@Column(name = "dep_code")
private String departmentCode;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
private Company company;
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
private List<Employee> employees;
}
@Entity
@Table(name = "Employee")
@Getter
@Setter
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private long employeeId;
@Column(name = "emp_code")
private String empCode;
@Column(name = "emp_name")
private String empname;
@Column(name = "employee_city")
private String employeeCity;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dept_id")
private Department department;
}
最佳答案
- 确保您的 JSON 包含companyId/departmentID/employeeId
- 按companyId加载公司
- 插入所有
departmentID == 0
的部门条目,并获取生成的 ID(Hibernate 将更新 POJO,或返回一个包含 ID 集的新 POJO) - 更新所有
departmentID > 0
的部门条目,并记住使用的部门 ID - 迭代
company.getDepartments()
和iterator.remove()
条目,其中 DepartmentID 不包含在根据 (3) 和 (4) 构建的集合中 - 通过保留
公司
,Hibernate 将检测哪些部门被删除,并删除这些部门
对部门 -> 员工关系进行基本相同的操作
关于java - Hibernate 更新一对多映射中的子条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772121/