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"
実際には修正されました。