如何从关系中删除子对象或父对象?

时间:2014-02-05 06:18:28

标签: java hibernate jpa one-to-one many-to-one

我做了一个有更多关系的小应用程序。现在我想删除我的表的详细信息如何删除我没有任何想删除。

关系如下:

  

PanCard - >员工(Ono To One)

     

员工 - > ProjectManger(与员工的双向多对一关联)

     

项目 - > ProjectManager(与项目的双向多对一关联)

现在我要删除逐个表数据的数据

以下是我的POJO课程代码:

PanCard.java

  @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;

Employee.java

@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;

ProjectManager.java

@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;

Projects.java

 @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,则应删除EmployeeProjects,但EmployeePanCard有关系,因此不会删除。
  • 如果我要删除Projects,则应删除ProjectManager,但ProjectMangerEmployee有关联,因此不会删除。

所以我必须从哪里开始删除,如何删除我不知道的内容。

3 个答案:

答案 0 :(得分:3)

您可以从任何您喜欢的表中开始删除。但是,如果要使用JPA,则必须防止出现约束冲突。你可以通过

来做到这一点
  • 从拥有方删除,或
  • 取消拥有实体上的外键,然后从反面删除。

澄清关系映射:

  • PanCard是与Employee的关系的拥有方。
  • Employee是与ProjectManager的关系的拥有方。
  • Project是与ProjectManager关系的拥有方。

一般建议 - 不要使用多方的级联。结果大多不是你想要的 - 违反约束。如果您删除Employee,则删除会级联到ProjectManager。由于经理可以拥有多名员工,因此违反了Employee表中的外键约束。因此,我会将级联从Employee移除到ProjectManager

答案 1 :(得分:0)

为什么要在删除员工时删除项目经理?
这不是一对一的关系,还有其他员工和其他项目也是如此。

答案 2 :(得分:0)

简而言之:

  1. 获取一个开放的实体管理员

  2. 开始交易

  3. 删除必要的引用(即执行您想要执行的操作,但确保之后满足所有约束)

  4. 提交交易

  5. 关闭entitymanager