gpt4 book ai didi

java - Hibernate异常帮助: TransientObjectException

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:24 25 4
gpt4 key购买 nike

当我尝试更新对象时出现以下异常:

org.hibernate.TransientObjectException: object references an unsaved transient instance - 在刷新之前保存 transient 实例:......

有人能帮忙吗???

我尝试更新的对象在映射文件中将“惰性”属性设置为 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>

最佳答案

TransientObjectException 在您保存引用另一个 transient 对象(意味着它具有“默认”标识符值,通常为空)的对象然后刷新 session 时发生。当您创建新对象的完整图表但尚未明确保存所有对象时,通常会发生这种情况。有两种方法可以解决此问题:

  1. 正如您所建议的,您可以对其他关联对象使用级联保存。然而,级联并不是真正打算作为 TOE 的解决方法,而是为了方便地保存一组经常一起操作的相关对象。如果您在没有完整关联数据集的情况下分离对象,然后在启用级联的情况下保存它,您可能会无意中删除您不想丢失的数据。
  2. 确保图表中的所有临时对象都明确保存为工作单元的一部分。这实际上只是了解您的应用程序将如何创建对象图以及哪些实体是 transient 的,哪些可能是持久的或分离的。

我建议阅读 Hibernate 文档中的这一整章,以充分理解 transient 、持久和分离的术语:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html

关于java - Hibernate异常帮助: TransientObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com