Java Hibernate异常帮助:TransientObject异常

Java Hibernate异常帮助:TransientObject异常,java,hibernate,Java,Hibernate,当我尝试更新对象时,出现以下异常: org.hibernate.transientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例: 有人能帮忙吗 我尝试更新的对象在映射文件中的“lazy”属性设置为false。似乎hibernate希望我在刷新更新之前保存子对象 编辑(添加): 保存引用另一个瞬态对象的对象(表示该对象具有“默认”标识符值,通常为空),然后刷新会话时,会发生TransientObject异常。这通常发生在创建新对象的整个图形时,但尚未显式保存所有对象。有两种方

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

org.hibernate.transientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例:

有人能帮忙吗

我尝试更新的对象在映射文件中的“lazy”属性设置为false。似乎hibernate希望我在刷新更新之前保存子对象

编辑(添加):


保存引用另一个瞬态对象的对象(表示该对象具有“默认”标识符值,通常为空),然后刷新会话时,会发生TransientObject异常。这通常发生在创建新对象的整个图形时,但尚未显式保存所有对象。有两种方法可以解决此问题:

  • 正如您所建议的,您可以将保存级联到其他关联对象。然而,级联并不是TOE的解决方法,而是为了方便保存一组经常一起操作的相关对象。如果在没有完整关联数据集的情况下分离对象,然后在启用级联的情况下保存对象,则可能会无意中删除不希望丢失的数据
  • 确保图形中的所有瞬态对象都显式保存为工作单元的一部分。这实际上只是了解应用程序将如何创建对象图以及哪些实体是瞬态的,哪些实体可能是持久的或分离的
  • 我建议阅读Hibernate文档中的这一整章,以充分理解瞬态、持久和分离的术语:


    对于多对一关系,Hibernate不适合级联持久性操作,因为“一”在概念上是多个其他实体之间共享的实体。这种关系不是你所说的“子对象”


    您可以通过显式设置关系的cascade属性来覆盖此行为,也可以手动持久化多对一关系的另一端。

    应用程序位于Spring环境中。修复:从Hibernate环境中运行更新。

    dude在映射中使用属性“cascade=true”。一切都会好的。。。
    V-Boy

    似乎在映射文件中使用级联属性可以解决我的问题??只是不确定什么风格适合我。(尽管我认为我需要的是使用justdeleteonner)。从新手的角度理解hibernate文档可能有点困难。你能发布hibernate映射文件或注释的相关部分吗?Skaffman,谢谢你的澄清。我刚读了brd6644建议的文件。它有助于更好地理解Hibernate的一些基本概念。最后,我需要一些帮助来了解如何能够更新消息,而不将操作级联到与消息相关的User/HD;这是新的,这是什么意思?这是一个怎样的答案?
    <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>