Hum... id, nome e idPai é coisa de banco de dados. Vou ignorar isso por enquanto
Aparentemente vc tem (ou pode ter) algo como
class Pessoa {
private long id;
private String nome;
private Pessoa pai; /* isso é java */
/* construtor e métodos getters */
}
Agora, se vc quer toda uma hierarquia a partir de uma pessoa, ao meu ver vc teria que criar uma arvore usando algum algoritmo recursivo-descendente.
Se vc tiver uma lista de pessoas, vc pode usar o pseudoalgoritmo abaixo:
Pessoa principal = new Pessoa(parametros);
List<Pessoa> lista = QQcoisa.getListaPessoas();
List<Pessoa> listaDaquelaHierarquia = new ArrayList();
for(Pessoa pessoa : lista){
if(pessoa.isFilho(principal)){
listaDaquelaHierarquia.add(pessoa);
}
}
Isso traria os filhos. Para isso isFilho(candidato) deve ser algo como
public boolean isFilho(Pessoa candidato){
return this.pai != null && this.pai.equals(candidato);
}
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).