struts 1抛出org.hibernate.TransientObjectException

时间:2012-08-30 13:54:49

标签: hibernate struts-1

我正在尝试将活动审核添加到我的struts 1应用程序中。我更改了一个对象,然后我想在我的审计表中创建一个引用已更改对象的行。我收到了TransientObjectException,因为我已经更改了引用对象。我试着冲洗会话,但这并没有解决它,我不知道为什么。

merchant.setTrusted(false);
merchantDAO.saveOrUpdate(merchant);
// trying to resolve org.hibernate.PropertyValueException: not-null property references a null or transient value: com.rc.model.ActivityAudit.user
SessionManagerFactory.getSessionManager(DatasourceType.M).getSession().flush();

ActivityAuditManager.addActivityAudit("Set merchant to untrusted", merchant, userAccount);

其中ActivityAuditManager.addActivityAudit()是:

public static void addActivityAudit(String action, Merchant merchant, IMerchantUserAccount user) {
    ActivityAudit activityAudit = new ActivityAudit(merchant, action, user, new Date());
    activityAuditDAO.saveOrUpdate(activityAudit);
}

我得到的例外是:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing

但据我所知,我

ETA映射:

<class name="com.rc.model.ActivityAudit" table="activity_audit" discriminator-value="0">
...
    <many-to-one name="merchant" class="com.rc.model.Merchant"
                 column="merchantid" unique="false" not-null="true" cascade="none"/>
...

我尝试了cascade="all"cascade="save-update",但都没有改善这种情况。

ETA:请参阅下面我自己的回答,但cascade="save-update"确实已经解决了这个问题。

1 个答案:

答案 0 :(得分:0)

有两个问题。第二个是在我修复第一个时发现的,最初模糊了cascade="save-update"确实解决了这个问题的事实。

在这个问题中, object references an unsaved transient instance - save the transient instance before flushing 用户nanospeck发布了一个帮助我的调试方法。

在我使用该调试方法并更详细地检查了Exception之前,我没有注意到第二个问题。