【问题标题】:How to update child when parent is deleted删除父级时如何更新子级
【发布时间】:2013-02-19 11:49:26
【问题描述】:

我的要求是当我删除父级时,不应该删除子级,而是删除子级,子列department_ID 之一是外键必须更新一些值,比如一个部门(父表)包含许多员工和员工(子表)表都有Department_ID作为外键列。当我删除父表时,我面临的问题没有任何反映在子表上,因为我已经制作了updatable=false,如果我让它成为真的那么删除父列,子列设置为空,或者如果我更新父列,那么子Department_Id 列也设置为空,这违反了要求,所以这就是为什么我将其设为假。我不希望在父生成时更新子列任何更改仅应反映在删除操作上,仅反映在一列上。请帮帮我我该怎么办?谢谢

这是我的父表部门代码

  @Id
  @Column(name = "DEPARTMENT_ID")
  private String departmentId;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "DEPARTMENT_ID",insertable=false,updatable=false)
  Collection<Employee> employeeList;

这是我的孩子 Table 员工

    @Id
    @Column(name = "EMPLOYEE_NUMBER")
    private int employeeNumber;
    @Column(name = "FIRST_NAME")
    private String firstName;
    @Column(name = "LAST_NAME")
    private String lastName;

    @Column(name = "DEPARTMENT_ID")
    private String departmentId;

【问题讨论】:

    标签: hibernate hibernate-mapping hibernate-annotations


    【解决方案1】:

    让children-side来维护一对多的关系,所以需要给@OneToMany添加mappedBy属性。

    @Id
    @Column(name = "DEPARTMENT_ID")
    private String departmentId;
    
    @OneToMany(fetch = FetchType.EAGER, mappedBy="departmentId")
    @JoinColumn(name = "DEPARTMENT_ID",insertable=false,updatable=false)
    Collection<Employee> employeeList;
    

    保持如下关系:

    employee.departmentId = newDepartmentId; //or set it null to detach from the old dept
    

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2013-01-31
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多