gpt4 book ai didi

java - Hibernate 更新一对多映射中的子条目

转载 作者:行者123 更新时间:2023-12-01 18:48:41 24 4
gpt4 key购买 nike

我有一个

  1. 公司表

  2. 部门表

  3. 员工表。

我正在使用 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;
}

最佳答案

  1. 确保您的 JSON 包含companyId/departmentID/employeeId
  2. 按companyId加载公司
  3. 插入所有 departmentID == 0 的部门条目,并获取生成的 ID(Hibernate 将更新 POJO,或返回一个包含 ID 集的新 POJO)
  4. 更新所有 departmentID > 0 的部门条目,并记住使用的部门 ID
  5. 迭代 company.getDepartments()iterator.remove() 条目,其中 DepartmentID 不包含在根据 (3) 和 (4) 构建的集合中
  6. 通过保留公司,Hibernate 将检测哪些部门被删除,并删除这些部门

对部门 -> 员工关系进行基本相同的操作

关于java - Hibernate 更新一对多映射中的子条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com