2012-08-30 4 views
0

struts 1 어플리케이션에 활동 감사를 추가하려고합니다. 개체를 변경 한 다음 변경된 개체를 참조하는 행을 내 감사 테이블에 만들려고합니다. referent 객체를 변경했기 때문에 TransientObjectException이 발생합니다. 세션을 내리려고했는데 그걸 해결하지 못했고 이유가 확실하지 않습니다.struts 1이 org.hibernate.TransientObjectException을 던졌습니다.

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

하지만 지금까지 내가에게 오전을 말할 수 : 내가 갖는

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

는 예외입니다 : ActivityAuditManager.addActivityAudit은()이다

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); 

.

ETA 매핑 : 나는 cascade="all"cascade="save-update"을 시도하지 않으며 어느 쪽도

<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="save-update"이 실제로이를 수정했습니다.

답변

0

두 가지 문제가있었습니다. 첫 번째 문제를 해결했을 때 발견 된 두 번째 문제는 처음에 cascade="save-update"이 실제로이 문제를 해결했다는 사실을 모호하게 만들었습니다. 이 질문에

, object references an unsaved transient instance - save the transient instance before flushing 사용자 nanospeck는 나에게 많은 도움이 디버깅하는 방법을 기록했다.

디버깅 방법을 사용하고 예외를 자세히 조사 할 때까지 두 번째 문제점을 알지 못했습니다.

관련 문제