Bom dia,
Tenho uma classe que monta o organograma da empresa.
A classe organograma é composta pelos atributos id, nome e idPai.
Gostaria de criar um método onde eu passasse o idPai como parâmetro e me retornasse toda a hierarquia desse pai, ou seja, filhos, netos, bisnetos … Nnetos.
Você quer, à partir de um nó, retornar todos abaixo dele, é isso?
Como você quer fazer este retorno, em forma de um novo organograma?
Não sou um grande conhecedor de organogramas, mas acho que eles tem comportamento semelhantes à árvores, não tem?
Sugiro que você procure por algoritmos para impressão manipulação de árvores (da área de estruturas de dados).
Para pegar toda a hierarquia vc pode fazer isso N vezes (recursivamente) ou vc pode apelar para estruturas de dados mais interessantes (como montar uma arvore baseado em quem é pai de quem e, então, pegar um ramo da arvore).
É claro que, se isso reflete o banco de dados e vc quer fazer isso via SQL ou Hibernate, vc tem varias opções para realizar o que vc quer. Por exemplo, no Oracle, vc tem a clausula “Connected By”, para dados desse tipo (tipico de bancos hierarquicos).
[quote=engfelipeoliveira]Bom dia,
Tenho uma classe que monta o organograma da empresa.
A classe organograma é composta pelos atributos id, nome e idPai.
Gostaria de criar um método onde eu passasse o idPai como parâmetro e me retornasse toda a hierarquia desse pai, ou seja, filhos, netos, bisnetos … Nnetos. [/quote]
Esta estrutura de dados está mapeada em um ORM?
Você está querendo saber “como seria se fosse”?
A estrutura de dados já está montada aquequadamente, vc quer saber apenas como percorrer a alista?
Com essa estrutura seria meio complicado achar todos os filhos de um mesmo pai…já que o nó só tem referência para o pai, e não tem referência para uma lista de filhos…Só consico percorrer das folhas para a raiz… Ou estou errado??
OK pessoal.
Seguindo a linha do Oracle, montei a seguinte query:
SELECT x.lota_nm_lotacao
FROM tb_lotacao x
CONNECT BY PRIOR x.id_lotacao=x.id_unidade_pai
START WITH x.id_unidade_pai = parametro
ORDER SIBLINGS BY x.lota_nm_lotacao
Está me retornando exatemente o que eu quero.
A minha dúvida é, como transformar isso em uma query para o hibernate?