2009-05-20 2 views
0

Billy McCafferty의 모범 사례 문서에서 제안한대로 요청 당 세션을 사용하여 NHibernate와 ASP.Net을 사용하고 있습니다 (미안하지만 포함 할 수 없음) 링크). 이 버전을 성공적으로 버전 낙관적 인 잠금, 업데이트 된 개체를 HTTP 세션 개체에 저장하고 SaveOrUpdate 메서드를 사용하여 NHibernate 세션에 다시 연결하는 데 사용했습니다.NHibernate StaleObjectStateException 일대 다 관계가있는 객체에 대해 버전 낙관적 잠금을 사용하는 경우

그러나 최신 페이지에서는 하위 개체 컬렉션을 업데이트해야합니다. 나는 NHibernate 매뉴얼의 부모 자식 예제 (17 장)에서 제안 된 방법을 사용했다. 이는 단일 요청으로로드되고 저장 될 때 작동합니다. 그러나 하나의 요청으로로드되고 HTTP 세션에 저장되고 SaveOrUpdate를 사용하여 후속 요청에 다시 연결될 때 NHibernate 세션을 플러시 할 때 StaleObjectException이 발생합니다. 자식 개체 컬렉션을 변경하지 않은 경우에도이 문제가 발생합니다.

부모 개체의 속성에 대한 변경 내용은 데이터베이스에 저장되므로 NHibernate에서 개체를 두 번 업데이트하려고 시도하는 것으로 보입니다. 필자는 이것이 매핑의 캐스케이드 옵션과 관련이 있다고 생각하지만 부모/자식 관계가 올바르게 작동하려면 이러한 것들이 필요합니다.

부모 클래스 매핑

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="NHS.WebTeam.PharmacyFirst.Medication, PharmacyFirst" table="Medication" lazy="false" optimistic-lock="version" where="Deleted=0"> 
    <id name="ID" column="Medication_ID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <version column="version" name="Version"/> 
    <property name="Deleted" column="Deleted" /> 

    <property name="Name" column="Name" /> 

    <bag name="Prices" access="field.camelcase-underscore" lazy="false" inverse="true" cascade="all"> 
     <key column="Medication_ID"/> 
     <one-to-many class="NHS.WebTeam.PharmacyFirst.MedicationPrice, PharmacyFirst" /> 
    </bag> 

    </class> 
</hibernate-mapping> 

하위 클래스 매핑

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="NHS.WebTeam.PharmacyFirst.MedicationPrice, PharmacyFirst" table="Medication_Price" lazy="false" optimistic-lock="version" where="Deleted=0"> 
    <id name="ID" column="Medication_ID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <many-to-one name="Medication" column="medication_id" not-null="true" cascade="none"/> 
    <property name="DateFrom" column="Date_From" /> 
    <property name="Price" column="Price" /> 

    </class> 
</hibernate-mapping> 

하시기 바랍니다 할 수있는 사람의 도움 : 여기

내 매핑 파일입니다.

답변

0

이 문제를 발견 한 사람은 nhibernate 2.1에서 문제가 해결 된 것으로 보입니다. 따라서 업데이트해야합니다.

관련 문제