개체를 유지하기 위해 집계에 추가 된 할당 된 ID를 가진 엔티티 "Group"이 있습니다. 이것은 NHibernate가 새로운 것이거나 존재하는 것인지를 알 수 없기 때문에 문제를 일으킨다. 이 문제를 해결하기 위해 그룹 엔티티가 SQL 타임 스탬프 버전 열에서 낙관적 잠금을 사용하도록 매핑을 변경했습니다. 이로 인해 새로운 문제가 발생했습니다. 그룹에 하위 오브젝트가 있습니다. 따라서 NHibernate는 새로운 그룹을 데이터베이스로 플러시 할 때 Group 테이블에 그룹 레코드를 생성 한 다음, 각각의 하위 오브젝트를 삽입 한 다음 그룹 레코드를 업데이트하여 타임 스탬프 값을 업데이트합니다. 그러나 매핑이 dynamic-update = "true"및 optimistic-lock = "version"인 경우 업데이트를 완료하기 위해 생성 된 sql은 유효하지 않습니다.optimistic-lock = "version"및 dynamic-update = "true"가있는 NHibernate 매핑이 무효 인 update 문을 생성 중입니다.
<class xmlns="urn:nhibernate-mapping-2.2" dynamic-update="true" mutable="true" optimistic-lock="version" name="Group" table="Groups">
<id name="GroupNumber" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="GroupNumber" length="5" />
<generator class="assigned" />
</id>
<version generated="always" name="Timestamp" type="BinaryBlob" unsaved-value="null">
<column name="TS" not-null="false" sql-type="timestamp" />
</version>
<property name="UID" update="false" type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="GroupUID" unique="true" />
</property>
<property name="Description" type="AnsiString">
<column name="GroupDescription" length="25" not-null="true" />
</property>
<bag access="field.camelcase-underscore" cascade="all" inverse="true" lazy="true" name="Assignments" mutable="true" order-by="GroupAssignAssignment">
<key foreign-key="fk_Group_Assignments">
<column name="GroupNumber" />
</key>
<one-to-many class="Assignment" />
</bag>
<many-to-one class="Aggregate" name="Aggregate">
<column name="GroupParentID" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
맵핑이 동적 업데이트 및 optimistic 잠금을 모두 포함, 생성 된 SQL은 다음과 같습니다 : 더 SET가 없기 때문에 이것은 분명히 잘못된
UPDATE groups SET WHERE GroupNumber = 11111 AND TS=0x00000007877
여기
은 매핑 진술. 동적 업데이트 부분을 제거하면이 업데이트 문에서 모든 내용이 업데이트됩니다. 이렇게하면 명령문은 유효하지만 오히려 불필요합니다.전에이 문제를 본 사람이 있습니까? 내가 놓친 게 있니?
감사합니다. Steve
독립 실행 형 테스트 케이스를 만들 수 있습니까? –