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.