nhibernate nonuniqueObjectException (잠금 장치와 함께)을 다시 잡을 때.
-
16-09-2019 - |
문제
기본 실행 순서 :
- 의 모음
PersistentObjects
그런 다음 세션과 별도로 캐시를 쿼리합니다. - 컬렉션은 속성 중 일부를 게으르게로드하기 위해 세션에 다시 연결 해야하는 모듈로 전달됩니다 (사용
session.Lock(obj, LockMode.None)
). - 모듈이 처리를 완료 한 후 다른 모듈은
SaveOrUpdate
ㅏUserSetting
작업을 초기화 한 사용자에 대한 일부 사용 통계가있는 개체. - 에
session.Flush()
nhibernate는 aNonUniqueObjectException
.
이 문제를 해결하는 한 가지 방법은 다음과 같은 객체의 새 사본을 얻는 것임을 알게되었습니다.
obj = session.Get(obj.GetType(), (obj as PersistentObject).Id);
다시 재발하는 대신 session.Lock
. 그러나 일부 레코드 세트 중 일부가 잠재적으로 상당히 크며 각 객체를 개별적으로 재 처리하면 성능 드래그가 될 수 있으므로 이는 최적이 아닙니다.
비 유니 키 인 객체는 PersistentObject
수업이 아닙니다 UserSetting
수업. 따라서 플러시가 왜이 예외를 유발하는지 이해할 수 없습니다.
모듈이 완료된 후 캐시 된 물체를 퇴치하려고 시도했지만 도움이되지 않습니다.
이 문제를 피할 수있는 세션에 객체를 첨부하는 더 좋은 방법을 아는 사람이 있습니까?
해결책
각 항목을 처리하고 사용자 설정을 업데이트하기 위해 새로운 세션 (또는 트랜잭션)을 사용할 수 있습니까? 이것은 아마도 비 유적 인식을 방지 할 것입니다.
건배,
-메아 텐
제휴하지 않습니다 StackOverflow