А точно надо рекурсивно?
Вообще, я обычно в таком случае делаю LazyLoad. Т.е. изначально заполняется только верхний уровень (where parent is null), а при раскрытии узла подгружается только этот узел. Фокус в том, что когда создаешь узел ему надо создать фейкового ребенка, что бы была возможность этот узел раскрывать. При раскрытии узла этот подузел удаляется и создаются нормальные, загруженные из БД.
|