首页 > 解决方案 > Spring boot 中的级联类型

问题描述

我是 Spring Boot 的新手。我想知道在这种情况下我必须使用哪种级联类型。

我有一个Employee类和一个Departement

许多员工可以在一个部门工作(所以我想这是一个@ManyToOne 关系),一个部门可以有一个或多个员工(所以它是一个**@OneToMany)。

我想对必须传播到其他依赖项的 Employee 类执行一些编辑。但是如果我删除一名员工,我无法删除整个部门,所以我必须删除员工。

@Entity
public class Department
{
  @Column(nullable = false)
  private String name;
  @Id
  private String code;
  @Column(nullable = false)
  private String address;
  @Column(unique = true, nullable = false)
  private String website;
  @Column(unique = true, nullable = false)
  private String cellNumber;


  @JsonIgnore
  @OneToMany(mappedBy = "department")
  private Set<Employee> emplpoyee;
  
  //constructors, getters and setters
}

这是员工

public class Employee
{
  @Id
  private String SSN;
  @Column(nullable = false)
  private String name;

  @Column(nullable = false)
  private String lastname;

  @Column(nullable = false)
  private String username;

  @Column(nullable = false)
  private String gender;

  @Column(unique = true, nullable = false)
  private String email;

  @Column(nullable = false)
  private String password;

  @Column(nullable = false)
  private String role;

  @ManyToOne(cascade = CascadeType.???, fetch = FetchType.LAZY)
  @JoinTable(
        name = "employee_works_in_dept",
        joinColumns = {@JoinColumn(name = "employee_SSN")},
        inverseJoinColumns = {@JoinColumn(name = "dept_code")}
)
private Department department;
}

我必须用什么来代替??

我尝试使用 CascadeType.ALL 但它也删除了整个部门

标签: javaspringspring-boot

解决方案


首先,如果您的Employee只能是一个 Department的一部分,我认为您不需要单独的联接表。如果您的员工可以在多个部门工作,那么它就是多对多关系。

在考虑您的问题时,您可以简单地删除您的CascadeType您在Employee类中不需要它。

如果需要在删除部门时删除部门下的所有员工,则只需在部门侧添加CascadeType.ALL即可。

这里有一个以前的帖子有更好的答案。 @ManyToOne JPA 关联的 CascadeType.ALL 是什么意思


推荐阅读