С готовностью загрузить рекурсивное отношение

У меня есть рекурсивное отношение один ко многим, для которого по умолчанию используется значение lazy, равное true. Какой код я могу написать для API NH, который будет эффективно извлекать ВСЁ дерево, КАК ЕСЛИ у меня было lazy = & quot; false & quot; на отображение подкатегорий?

Вот рекурсивное отношение один ко многим:

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

Я не указываю lazy = & quot; false & quot; в списке, так как лень требуется примерно в половине запросов, которые мне нужно выполнить. У меня есть fetch = & quot; subselect & quot; в списке в качестве оптимизации, когда мне удается получить все дерево.

Я пробовал API-интерфейс ICriteria:

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

но это только нетерпеливо загружен только первый уровень в иерархии.

Ответы на вопрос(3)

Ваш ответ на вопрос