문제

Exer Loading 및 새로운 세션에서 모든 데이터베이스가 적용한 모든 데이터베이스에서 기존 NHibernate 코드를 전환하기 시작했으며 HTTP 요청 기간 동안 Lazy Loading 및 세션으로 새로운 세션으로 전환하기 시작했으며 문제가 발생하기 시작했습니다.

이 시스템에서 항목을 만들 때 드롭 다운으로 채워진 다중 관계가 있습니다. 데이터베이스에 저장하기에 충분합니다.

이메일 알림과 같은 일부 사후 작업을 수행하려면 동일한 항목을 다시로드하여 이전에 전체 객체 트리를 채워질 수 있습니다.

그러나 게으른로드로의 변경 및 전체 요청의 수명에 대한 세션 이후, 우리는 신비하게 무인 항목 아래의 속성에서 NullReferenceExceptions를 얻었습니다.

nhibernate를 통해 항목을 ChangeItem에로드합니다. 실패한 전화는 다음과 같습니다.

changedItem.PaperMedia.FormsAnalyst.User.Contact.Name

제지어는 완전히 채워져 있지만 Formsanalyst의 모든 것은 ID를 제외하고는 무효입니다.

이것은 우리가 그것을 저장했을 때와 동일한 상태 이므로이 문제의 가능한 원인 중 하나는 캐싱되고 간단히 검색되는 항목이므로 nhibernate는 데이터베이스의 실제 값을 무지합니다. 그러나 세션에서 세션에서 Flush ()를 명시 적으로 호출하고 저장과 후속 부하 사이의 거래를 명시 적으로 호출하고 있으므로 Commit () 또는 Flush ()가 캐시에 영향을 미치지 않습니다.

관련 HBM.XML 파일의 이러한 속성을 Lazy = "False"로 변경했으며 모든 영향을 미치지 않도록 setFetchMode FetchMode.eAger를 변경했습니다.

또한 Max_fetch_depth를 문제로 고려하고있었습니다. 세션에서 Refresh (Changeitem) 호출하면 효과가 없습니다. 그러나 Refresh (Changeitem.papermedia)를 호출하면 이름으로 완전히 채워집니다. 이것은 max_fetch_depth를 문제로 할인하는 것처럼 보이지만 그럼에도 불구하고 구성 인스턴스에서 setProperty ( "max_fetch_depth", "6")뿐만 아니라 Hibernate.cfg.xml에서 6으로 설정하려고 시도했습니다. 세션 공장을 만드는 동안 이들도 영향을 미치지 않았습니다.

나는 무엇을 시도 해야할지 모르겠다.

전에 그런 것을 본 사람이 있습니까? 나는 nhibernate를 처음 사용하기 때문에 간단 할 수 있습니다 ...

편집하다:

캐싱이 실제로 문제 인 것 같습니다. 세션 인스턴스에서 CLEAR ()을 호출하면이 동작이 수정됩니다.

따라서 문제는 이제 Cached 항목을 업데이트하지 않는 이유는 무엇입니까? 그것이 바로 제가 만들어 졌다고 생각한 것입니다.

도움이 되었습니까?

해결책

Flush ()는 데이터베이스에 변경 사항을 전송하기위한 것이라고 생각합니다. 현재 메모리에있는 경우 참조 된 객체로 캐시를 업데이트합니다. 따라서 다른 세션이나 CLEAR ()를 사용하거나 FormsAnalyst를 처음에 사용하여 FormsAnalyst를 채울 수 있습니다.

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