当我运行这个应用程序时,它给出了类似于org.hibernate.PropertyValueException的异常:非空属性引用了一个空的或暂时的值: in.dao.Teacher.address,有谁可以帮助我吗?下面是我的代码
Teacher.java
打包in.dao;
公开课教师实现了java.io.Serializable {
private Integer tid;
private Address address;
private String teachername;
public Teacher() {
}
public Teacher(Address address, String teachername) {
this.address = address;
this.teachername = teachername;
}
public Integer getTid() {
return this.tid;
}
public void setTid(Integer tid) {
this.tid = tid;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getTeachername() {
return this.teachername;
}
public void setTeachername(String teachername) {
this.teachername = teachername;
}}
Teacher.hbm.xml
<hibernate-mapping>
<class name="in.dao.Teacher" table="teacher" catalog="sample">
<id name="tid" type="java.lang.Integer">
<column name="tid" />
<generator class="identity" />
</id>
<many-to-one name="address" class="in.dao.Address" fetch="select">
<column name="locationid" not-null="true" />
</many-to-one>
<property name="teachername" type="string">
<column name="teachername" length="20" not-null="true" />
</property>
</class>
</hibernate-mapping>发布于 2014-11-15 21:01:34
当您保存Teacher实体时,它可能引用了尚未保存的address实体。
您可以通过先保存address并在保存之前将保存的Address实例设置为teacher来修复它,例如:
Address mergedAddress = session.merge(address);
teacher.setAddress(mergedAddress);
session.merge(teacher);或者,您可以在Address属性中将Cascade设置为MERGE,这样Hibernate将在合并Teacher实体之前先合并地址。
https://stackoverflow.com/questions/26946013
复制相似问题