【发布时间】:2020-03-12 09:49:35
【问题描述】:
在我的spring boot应用程序中,员工和项目是两个实体类,这里项目与员工是一对多的关系。在这里,当我调用删除项目表中项目的 api 时,我希望与员工表中的项目相关联的所有员工都被删除。
这是我的实体类,这是项目类:
@Entity
@Table(name="project")
public class ProjectEmp {
@Id
private int proId;
private String proname;
@OneToMany(targetEntity = Employee.class,fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="eproId",referencedColumnName = "proId")
private List<Employee> emplo= new ArrayList<Employee>();
public List<Employee> getEmplo() {
return emplo;
}
public void setEmplo(List<Employee> emplo) {
this.emplo = emplo;
}
...............
这是我的员工类,它与另一个名为部门的类也有多对一的关系:
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int empId;
private String empName;
private String desig;
private int eproId;
@ManyToOne(targetEntity = Department.class,fetch = FetchType.EAGER)
@JoinTable(name="empdep",joinColumns = @JoinColumn(name = "empId"), inverseJoinColumns =@JoinColumn(name="depId"))
@JsonManagedReference
@JsonIgnore
private Department dep;
public Department getDep() {
return dep;
}
public void setDep(Department dep) {
this.dep = dep;
}
public int geteproId() {
return eproId;
}
public Employee seteproId(int eproId) {
this.eproId = eproId;
return this;
}
public String getDesig() {
return desig;
}
public Employee setDesig(String desig) {
this.desig = desig;
return this;
}
...............
这是我的控制器,用于传递必须删除的项目 ID:
@RequestMapping(value = "/delete/{id}",method=RequestMethod.DELETE)
public void deluse(@PathVariable int id) throws Exception
{
empService.delpro(id);
}
这是我删除记录的服务:
public void delpro(int id) {
ProjectEmp pp= proRepo.findByproId(id);
pp.getEmplo();
proRepo.delete(pp);
}
我得到的输出是:
Column 'epro_id' cannot be null
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1340) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) ~[mysql-connector-java-8.0.17.jar:8.0.17]
预期的输出是获取与之相关的项目id和员工id被删除。
【问题讨论】:
-
表之间也有外键关系吗?
-
只是我的项目类代码中的那个......没有别的
标签: hibernate mapping one-to-many