【发布时间】:2012-12-10 08:28:47
【问题描述】:
假设 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 两个实体都是关系的所有者,对吧?
我的疑问是当我首先创建部门然后创建一组员工并设置我创建的部门并保存部门对象时它工作正常。但后来我只是尝试创建一个部门并创建一个员工并将部门设置在那里并保存它给我的 Employee 对象下面的异常。
Hibernate:插入 Employee (deptId, name) 值 (?, ?) 异常 在线程“主”org.hibernate.TransientObjectException:对象 引用未保存的瞬态实例 - 保存瞬态实例 刷新前:hello.domain.Department
不应该是双向的吗?
【问题讨论】: