我做了一个有更多关系的小应用程序。现在我想删除我的表的详细信息如何删除我没有任何想删除。
关系如下:
PanCard - >员工(Ono To One)
员工 - > ProjectManger(与员工的双向多对一关联)
项目 - > ProjectManager(与项目的双向多对一关联)
现在我要删除逐个表数据的数据
以下是我的POJO课程代码:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="pName")
private String pName;
@Column(name="pNumber")
private int pNumber;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="EId")
private Employee employee;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "empFirstName")
private String empFirstName;
@Column(name = "empLastName")
private String empLastName;
@Column(name = "empDepartment")
private String empDepartment;
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="pmId")
private ProjectManager projectManager;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String department;
private String managerFirstName;
private String managerLastName;
//bi-directional many-to-one association to Myemployee
@OneToMany(mappedBy="projectManager",cascade = CascadeType.ALL)
private List<Employee> employee;
@OneToMany(mappedBy="projectManager",cascade = CascadeType.ALL)
private List<Projects> projects;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="projectName")
private String projectName;
@Column(name="projectDesc")
private String projectDesc;
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="pmId")
private ProjectManager projectManager;
现在我要删除表数据:从哪个表开始删除。
Pancard
,我应删除ProjectManager
,因为Employee
有FK。ProjectManager
,则应删除Employee
和Projects
,但Employee
与PanCard
有关系,因此不会删除。Projects
,则应删除ProjectManager
,但ProjectManger
与Employee
有关联,因此不会删除。所以我必须从哪里开始删除,如何删除我不知道的内容。
答案 0 :(得分:3)
您可以从任何您喜欢的表中开始删除。但是,如果要使用JPA,则必须防止出现约束冲突。你可以通过
来做到这一点澄清关系映射:
PanCard
是与Employee
的关系的拥有方。Employee
是与ProjectManager
的关系的拥有方。Project
是与ProjectManager
关系的拥有方。 一般建议 - 不要使用多方的级联。结果大多不是你想要的 - 违反约束。如果您删除Employee
,则删除会级联到ProjectManager
。由于经理可以拥有多名员工,因此违反了Employee
表中的外键约束。因此,我会将级联从Employee
移除到ProjectManager
。
答案 1 :(得分:0)
为什么要在删除员工时删除项目经理?
这不是一对一的关系,还有其他员工和其他项目也是如此。
答案 2 :(得分:0)
简而言之:
获取一个开放的实体管理员
开始交易
删除必要的引用(即执行您想要执行的操作,但确保之后满足所有约束)
提交交易
关闭entitymanager