我有两个表和对象: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
我看到人们有这种问题,但他们使用了级联,我不需要级联。任何人都可以帮助我。
答案 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);