假设 Department 和 Employee 之间存在 1-m 关系,哪个部门可以有很多员工,而一个员工只能在一个部门。我将 depId 作为 Employee 表中的外键。下面是实体与 setter 和 getter 的样子,
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long empId;
private String name;
@ManyToOne
@JoinColumn(name = "deptId")
private Department dept;
public Long getEmpId() {
return empId;
}
}
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long deptId;
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "deptId")
@IndexColumn(name = "idx")
private Set<Employee> listEmp;
}
之前的部门有属性 mappedBy,现在两个实体都有 joinColumn 两个实体都是关系的所有者,对吧?
我的疑问是当我首先创建部门然后创建一组员工并设置我创建的部门并保存部门对象时它工作正常。但是后来我只是尝试创建一个部门并创建一个员工并将该部门设置在那里并保存它给我的员工对象下面的异常。
Hibernate:插入员工(deptId,name)值(?,?)线程“main”中的异常org.hibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:hello.domain.Department
它不应该双向工作吗?