请教:object references an unsaved transient instance的解决方法
我使用Hibernate3 + spring2.5.6 + struts2.1.8 做一个小系统其中,有两个实体是一对多的关系(State 与 Article),State 作为一个属性在Article中,
在修改Article时,需要更新State。 最初我先直接用State st = new State(),然后再用set设置st的具体内容。结果抛出如下异常:
object references an unsaved transient instance - save the transient instance before flushing: pbc.bz.intendance.model.State; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: pbc.bz.intendance.model.State
然后在网上找了些方法,试了都不行。
后来想会不会是因为new 的对象不是持久的,我就先从数据库里面查询得到State对象,然后再set到Article中,可是还是一样的效果。
又在网上看到说是两个实体的一对多、多对多的关系出现问题。
我的配置是:State.hbm.xml文件
程序代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate. package="pbc.bz.intendance.model"> <class name="State" table="state" dynamic-update="true"> <!-- 映射标识属性 --> <id name="stateId" column="state_id" type="integer"> <generator class="identity" /> </id> <!-- 下面映射用户的其他普通属性 --> <property name="stateName" column="state_name" type="string" not-null="true" length="50" /> <property name="stateDesc" column="state_desc" type="string" not-null="true" length="100" /> <!-- State与Intendance的映射关系(一对多) --> <set name="articles" lazy="false" inverse="true" > <key column="state_id" not-null="false" /> <one-to-many class="Article" /> </set> </class> </hibernate-mapping>
Article.hbm.xml文件
程序代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate. package="pbc.bz.intendance.model"> <class name="Article" table="article" dynamic-update="true"> <!-- 映射标识属性 --> <id name="article" column="article_id" type="integer"> <generator class="identity"></generator> </id> <!-- 下面映射用户的其他普通属性 --> <property name="projectName" column="project_name" type="string" not-null="true" length="100" /> <!-- 映射该Intendance关联的反馈信息Feedback --> <many-to-one name="back" column="back_id" class="Feedback" lazy="false" /> <!-- 映射该Intendance所处的状态State --> <many-to-one name="state" column="state_id" class="State" not-null="true" lazy="false"/> <property name="submitDate" column="submit_date" type="date" not-null="true" /> </class> </hibernate-mapping>
请大家不吝赐教!
[ 本帖最后由 无缘今生 于 2010-9-10 16:46 编辑 ]