对象在映射为@ManyToOne时引用未保存的瞬态实例

时间:2013-10-28 11:44:03

标签: hibernate jpa orm

我有两个表和对象:StudentsInGroup和GroupRegistration。

class StudentInGroup {
@Id
@Column (name = "ID")
private Integer id;

// other fields

@ManyToOne(fetch = FetchType.EAGER, targetEntity = GroupRegistration.class)
@JoinColumn(name = "GROUP_CODE")
private GroupRegistration groups;

// other methods
}


class GroupRegistration {
@Id
@Column (name = "ID")
private Integer Id;

// other fields

@Column(name = "GROUP_CODE")
private Integer groupCode;  // this is not primary key

// other methods
}

我有表单和方法insertStudentInGroup(StudentInGroup student);但是当我调用这个方法时,我得到了异常:对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例:StudentInGroup.groups - > GroupRegistration

我看到人们有这种问题,但他们使用了级联,我不需要级联。任何人都可以帮助我。

2 个答案:

答案 0 :(得分:2)

如果您不使用级联,则需要先保存 GroupRegistration (非拥有方),然后再保存 StudentInGroup (拥有方),否则它将无法知道如何为您进行映射,因此显示TransientObjectException。希望它会对你有所帮助。

答案 1 :(得分:0)

这可以节省您的时间:

如果 GroupRegistration 已存在,则在保存 StudentInGroup 时,您需要确保 GroupRegistration 属性已正确设置为null或需要检查是否它持有正确的ID(主键)值。

Employee emp = new Employee();//or from UI modal.
emp.setDept((emp.getDept().getDeptId != null) ? new Dept(emp.getDept().getDeptId) : null); 
//When getting from UI, we need to explicitly set the property to null to make hibernate happy.:-)
em.persist(emp);