我正在尝试向我的 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"
实际上确实修复了它。