문제

기본 실행 순서 :

  1. 의 모음 PersistentObjects 그런 다음 세션과 별도로 캐시를 쿼리합니다.
  2. 컬렉션은 속성 중 일부를 게으르게로드하기 위해 세션에 다시 연결 해야하는 모듈로 전달됩니다 (사용 session.Lock(obj, LockMode.None)).
  3. 모듈이 처리를 완료 한 후 다른 모듈은 SaveOrUpdateUserSetting 작업을 초기화 한 사용자에 대한 일부 사용 통계가있는 개체.
  4. session.Flush() nhibernate는 a NonUniqueObjectException.

이 문제를 해결하는 한 가지 방법은 다음과 같은 객체의 새 사본을 얻는 것임을 알게되었습니다.

obj = session.Get(obj.GetType(), (obj as PersistentObject).Id);

다시 재발하는 대신 session.Lock. 그러나 일부 레코드 세트 중 일부가 잠재적으로 상당히 크며 각 객체를 개별적으로 재 처리하면 성능 드래그가 될 수 있으므로 이는 최적이 아닙니다.

비 유니 키 인 객체는 PersistentObject 수업이 아닙니다 UserSetting 수업. 따라서 플러시가 왜이 예외를 유발하는지 이해할 수 없습니다.

모듈이 완료된 후 캐시 된 물체를 퇴치하려고 시도했지만 도움이되지 않습니다.

이 문제를 피할 수있는 세션에 객체를 첨부하는 더 좋은 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

각 항목을 처리하고 사용자 설정을 업데이트하기 위해 새로운 세션 (또는 트랜잭션)을 사용할 수 있습니까? 이것은 아마도 비 유적 인식을 방지 할 것입니다.

건배,

-메아 텐

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top