【发布时间】:2016-03-04 08:48:48
【问题描述】:
我的(Spring Framework + Spring Data + Hibernate JPA)项目中有一个单向 OneToMany JPA 实体映射。实体类如以下代码所示。(为简洁起见,我删除了不相关的类成员)。
@Entity
@Table(name = "employees")
class Employee{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "employee_id")
private List<DepartmentAssignment> departmentAssignments = new ArrayList<>();
}
@Entity
@Table(name = "department_assignments")
class DepartmentAssignment{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@NotNull
@Column(name = "employee_id")
private Integer employeeId;
@NotNull
@Column(name = "department_id")
private Integer departmentId;
}
@Entity
@Table(name = "departments")
class Department{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
}
而且,在我的一个服务类中,有一种方法可以从 Employee 中删除 DepartmentAssignment,如下所示。
public Employee deleteDepartmentAssignment(Integer empId, Integer deptAssignmentId) {
Employee employee = employeeRepository.findOne(empId);
if(employee != null) {
for ( DepartmentAssignment da : employee.getDepartmentAssignments()) {
if(da.getId().equals(deptAssignmentId)) {
employee.getDepartmentAssignments().remove(da);
employee = employeeRepository.save(employee);
break;
}
}
}
return employee;
}
但是,调用上述方法给我一个错误:org.hibernate.exception.ConstraintViolationException,并且在 SQL 日志中,我可以看到事务的最后一条 SQL 语句的Column 'employee_id' cannot be null 错误。
谁能告诉我我在这里做错了什么以及如何解决它?
【问题讨论】:
-
请添加完整的堆栈跟踪。
-
DepartmentAssignment 类中还有其他内容吗?如果不是,那有什么意义。您可以删除它而不会造成任何功能损失。
标签: spring hibernate jpa spring-data