【发布时间】:2011-10-13 03:39:16
【问题描述】:
我有两个课程 - Person 和 Department。 Person 和 Department 之间存在多对一的关系。
public class Person {
private Integer id;
private String name;
private Department department;
@ManyToOne(fetch=FetchType.EAGER, optional=true, targetEntity=Department.class)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name="department", referencedColumnName="id", nullable=true, insertable=false, updatable=true)
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
// other getter and setter
}
public class Department {
private Integer id;
private String name;
// other getter and setter
}
程序通过调用保存Person对象:
getHibernateTemplate().saveOrUpdate(person);
在保存之前设置Person对象的部门值,程序运行正常。保存前Person对象的department值为null时,出现如下错误:
对象引用了一个未保存的瞬态实例 - 保存瞬态 刷新前的实例:webmodule.model.Department;嵌套异常 是 org.hibernate.TransientObjectException:对象引用了一个 未保存的瞬态实例 - 之前保存瞬态实例 刷新:webmodule.model.Department
多对一关系是否遗漏了任何设置?请指教,谢谢。
我已经定义了 Struts2 + Spring + Hibernate 并且通过调用保存了 person 实例
getHibernateTemplate().saveOrUpdate(person);
我已经尝试添加了
@org.hibernate.annotations.Cascade
({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
但这会在将 null 保存到多对一关系时自动在 Department 中创建一个附加记录!
例如,我在 Department 中有 3 条记录 MIS、PURCHASING 和 ADMIN,而 person 实例的部门最初保存为 MIS。当我尝试保存部门设置为空的人员实例时。 Department 中有 MIS、PURCHASING、ADMIN 和 MIS 4 条记录,person 实例保存,department 设置为新的 MIS 记录,不为空!
您是否有任何简单的多对一关系示例将 null 值保存到关系列?非常感谢。
【问题讨论】: