링크 된 질문과 답변에서 알 수 있듯이 관계를 단방향으로 만들어이를 정렬 할 수 있습니다. 그래서 대신 에 직접 대답하는 대신을 묻습니다. 은 왜인데 더 나은 방법으로 가려고합니다.
나는 항상 컬렉션을 열심히 가져 오기를 원하지 않는다는 것을 분명히 알기 때문에 NHibernate가 게으른 로딩을하는 이유가된다. (그리고 프리 페치하지 않는 한 NHibernate가 항상 콜렉션을로드하는 이유) Hibernate는 실제로 당신이 그것을 요구할 때까지 실제로 그 콜렉션을 가져 오지 않을 것이다. 그래서 내 질문은 NHibernate 당신이 그것을 따라 작업 할 때 컬렉션을로드하지 않으시겠습니까? 엔티티에서 자식 컬렉션에 접근 할 때 NHibernate가 무엇을하기를 원합니까?
업데이트 :
당신은 정말 이유 (아마 난 그냥 고집하고 있습니다)하지만, 잘, 당신이 컨트롤을 원하는 내 질문에 대답하지 않았다. NH이 그 일을하지 못하도록하는 가장 간단한 방법은 처음부터 NH가 그렇게하지 않도록 지시하는 것입니다 (즉, 매핑하지 마십시오). 즉, 관계의 "많은"(콜렉션) 끝을 맵핑하지 마십시오. 클래스에 컬렉션을 유지할 수 있지만 NHibernate에 매핑 파일에 추가하여 NHibernate에 채우라고하지 않은 한 결코 컬렉션을 유지할 수 없습니다. 그런 다음 PopulateCollection
메소드를 어딘가에 추가하여 NH 쿼리를 실행하고 해당 콜렉션에 결과를 저장할 수 있습니다. 당신은 NHibernate가 컬렉션에 대해 제공하는 모든 멋진 의미를 잃는다. 왜냐하면 변경 사항을 추적 할 수 없기 때문이다. 당신은 당신 자신의 Add와 Remove 메소드를 구현해야 할 것이다.
그래서 David Kemp의 대답은 다른 질문입니다.
이유는 간단합니다.로드되는 내용과 그렇지 않은 내용을 수동으로 제어하려고합니다. 후드 아래에서 데이터베이스로 질의하는 것을 원하지 마십시오. 또한 디버깅하는 동안 엔티티가로드되지 않도록하는 것이 매우 짜증나게됩니다. 로드되지 않은 컬렉션에서 작업 할 경우 null 예외가 발생할 것으로 예상됩니다. – Drevak