Dúvida HQL Hibernate

Fala galera,

tenho o seguinte senário:

Tenho infinitos niveis de categorias e dentro de cada categoria tenho infinitos artigos com níveis de acesso.
Os mapeamentos do hibernate estão nos xml. Estão funcionando corretamente.

Gostaria de saber qual a melhor forma para retornar a arvore de categorias, com os seus respectivos artigos de um determinado perfil.

public class Category {

     private Long id;
     private String name;
     private Category parent;
     private List<Category> categories;
     private List<Article> articles;

    //getters and setters
}
public class Article {
   private Long id;
   private String title;
   private String text;
   private List<Article> articlesRelated;
   private List<Perfil> perfis;

   //getters and setters
}
public class Perfil {
   private Long id;
   private String name;
}