当我尝试更新对象时,我收到以下异常:
org.hibernate.TransientObjectException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:......
任何人都可以帮忙???
我尝试更新的对象在映射文件中将'lazy'属性设置为false。好像hibernate希望我在刷新更新之前保存子对象???
编辑(已添加):
<hibernate-mapping>
<class name="utils.message.Message" table="messages">
<id name="id" column="message_id">
<generator class="native" />
</id>
<property name="message_text" column="message_text" />
<property name="message_file" column="message_file" />
<property name="is_active" column="is_active" type="boolean"/>
<property name="is_global" column="is_global" type="boolean"/>
<property name="start" column="start" type="java.util.Date"/>
<property name="end" column="end" type="java.util.Date"/>
<property name="last_updated" column="last_updated" type="java.util.Date"/>
<many-to-one name="last_updated_by" class="utils.user.User" column="last_updated_by" lazy="false"/>
<many-to-one name="healthDepartment" class="utils.healthdepartment.HealthDepartment" column="health_department_id" lazy="false"/>
</class>
</hibernate-mapping>
答案 0 :(得分:17)
当您保存引用另一个瞬态对象的对象(意味着它具有“默认”标识符值,经常为null)然后刷新会话时,会发生TransientObjectException。当您创建新对象的整个图形但未明确保存所有对象时,通常会发生这种情况。有两种方法可以解决这个问题:
我建议从Hibernate文档中阅读整章,以充分理解瞬态,持久和分离的术语:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html
答案 1 :(得分:4)
在映射中使用属性“cascade = true”。一切都会好的...... 的 V-男孩 强>
答案 2 :(得分:0)
由于多对一关系,Hibernate级联持久性操作不合适,因为“one”在概念上是一个在许多其他人之间共享的实体。正如你所说,这种关系不是“儿童对象”。
您可以通过在关系上显式设置cascade属性来覆盖此行为,也可以手动保留多对一关系的另一端。
答案 3 :(得分:-1)
App处于Spring环境中。修复:从Hibernate环境中运行更新。