Chętnie ładuje relację rekurencyjną

Mam rekurencyjną relację jeden do wielu, która ma domyślną leniwą wartość true. Jaki kod mogę napisać w stosunku do interfejsu API NH, który sprawnie pobierze CAŁE drzewo JAKO, gdybym miał lazy = „false” w mapowaniu podkategorii?

Oto rekurencyjna relacja jeden-do-wielu:

<class name="Category" lazy="false">
    ...
    <list name="SubCategories" fetch="subselect">
            <key column="ParentCategoryID"/>
            <index column="PositionInList"/>
            <one-to-many class="Category"/>
    </list>

Nie podaję lazy = „false” na liście, ponieważ lazalność jest wymagana w około połowie zapytań, które muszę uruchomić. Mam fetch = "subselect" na liście jako optymalizację, gdy uda mi się pobrać całe drzewo.

Próbowałem interfejsu API ICriteria:

session.CreateCriteria<Category>().SetFetchMode( "SubCategories", FetchMode.Eager ).Add( Restrictions.IsNull("ParentCategory") ).SetResultTransformer( CriteriaSpecification.DistinctRootEntity ).List<Category>();

ale to tylko chętnie ładowało tylko pierwszy poziom w hierarchii.

questionAnswers(3)

yourAnswerToTheQuestion