我正在尝试将活动审核添加到我的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"
确实已经解决了这个问题。
答案 0 :(得分:0)
有两个问题。第二个是在我修复第一个时发现的,最初模糊了cascade="save-update"
确实解决了这个问题的事实。
在这个问题中, object references an unsaved transient instance - save the transient instance before flushing 用户nanospeck发布了一个帮助我的调试方法。
在我使用该调试方法并更详细地检查了Exception之前,我没有注意到第二个问题。