hibernate.TransientObjectException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例 - 在hibernate升级之后

时间:2013-01-06 18:05:05

标签: hibernate cascade

升级到hibernate 3.6.0.FINAL后出现错误但是它正在使用3.3.2.GA

我的问题类似于https://forum.hibernate.org/viewtopic.php?p=2452617

在这种情况下,他们设置了cascade =“all”来解决问题。

但在我的情况下,我不想更新引用的实体。我没有双向,关系,它只是一个多对一。大多数类似的问题在这里发布,建议做一个级联所有,但在我的情况下,它不想级联。

我的映射

<class name="org.hmil.ams.com.model.MyUserDetails" table="CMUPMST_TB">
        <id name="username" column="UPMST_USER_NAME" type="java.lang.String"
            unsaved-value="0">
            <generator class="assigned" />
        </id>
        <property name="password" column="UPMST_USER_PWD" type="java.lang.String"
            not-null="true" />
        <property name="UPMST_ROLE_ID" type="long" not-null="true" />

        <many-to-one name="UPMST_ROLE" fetch="join" cascade="none"
            insert="false" update="false"         class="org.hmil.ams.setup.model.CodeMst">
            <column name="UPMST_ROLE_ID" />
        </many-to-one>
</class>

我正在使用Spring BlazeDS / flex,我的对象是分离的。现在,当我尝试保存新创建的MyUserDetails实体时,它说有CodeMst的瞬态实例,(我没有更新实体,但可能是BlazeDS,而它反序列化新创建的MyUserDetail,它实例化引用的CodeMst实体, null值,这可能导致问题,但升级前相同的代码工作) 任何帮助解决这个问题都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我实际上在这里找到了一个解决方案: https://hibernate.atlassian.net/browse/HHH-5908

部署补丁。我刚刚为TypeHelper.findDirty方法添加了相同的修复程序 (第287行)

OLD: final boolean[][] includeColumns,
NEW: final boolean[] includeProperties, final boolean[][] includeColumns,

然后在AbstractEntityPersister.findDirty(第3408行)中:

OLD: propertyColumnUpdateable,
NEW: getPropertyUpdateability(), propertyColumnUpdateable,

<强>更新 打破此问题的hibernate修复程序是https://hibernate.atlassian.net/browse/HHH-2350