![]() |
#2
linjx01232010-09-10 16:42
|
其中,有两个实体是一对多的关系(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>
<!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>
<!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 编辑 ]