我想將活動審計添加到我的struts 1應用程序。我更改了一個對象,然後我想在審計表中創建一個引用已更改對象的行。我得到了TransientObjectException,因爲我改變了對象對象。我試着刷新會話,但沒有解決它,我不知道爲什麼。struts 1引發org.hibernate.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"
實際上確實解決了它。