繁体   English   中英

hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例-在刷新之前保存瞬态实例-休眠升级后

[英]hibernate.TransientObjectException:object references an unsaved transient instance-save the transient instance before flushing-after hibernate upgrade

升级到休眠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的瞬时实例,(我不更新实体,但是在反序列化新创建的MyUserDetail时可能是BlazeDS,它实例化了引用的CodeMst实体, null值,这可能是导致问题的原因,但是在升级之前,相同的代码仍在工作)解决此问题的任何帮助。

我实际上在这里找到了解决方案: 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,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM