java - 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 但它也删除了整个部门
解决方案
首先,如果您的Employee只能是一个 Department的一部分,我认为您不需要单独的联接表。如果您的员工可以在多个部门工作,那么它就是多对多关系。
在考虑您的问题时,您可以简单地删除您的CascadeType。您在Employee类中不需要它。
如果需要在删除部门时删除部门下的所有员工,则只需在部门侧添加CascadeType.ALL即可。
这里有一个以前的帖子有更好的答案。 @ManyToOne JPA 关联的 CascadeType.ALL 是什么意思
推荐阅读
- c# - 为主键手动创建索引是一种好习惯吗?
- mysql - 如何仅获取左表值(左连接)
- sql-server - 是否可以根据列值复制一行,并更改另一个列值?
- node.js - 用于构建 Reactjs Web 应用程序的最流行的技术组合是什么
- python - FastAPI websocket无法连接
- r - 翻译核苷酸三联体
- google-cloud-speech - 停止/启动 Google 语音识别服务后的长时间延迟
- excel - 在数据透视表中按月过滤日期,而不是从每个月的 1 日开始
- c - 用户控制的 do-while 循环中的 if-else 循环问题
- r - 循环遍历 R 中的数据框名称并将相应的数据框保存为 Rds 文件