método recursivo para recuperação de bens de um departamento e subdepartamentos

Senhores,
Venho pedir ajuda pois estou implementando esses métodos para que eu possa recuperar a partir da cunsulta de unidades(Departamentos) os bens de um determinado departamento inclusive os bens dos subdepartamentos, ou seja caso eu escolha um departamento, devo varrer os bens do próprio e os bens dos departamentos que pertençam ao departamento superior. Estou tendo problema ao fazer o addAll(col), a variável unids está declarada globalmente.

public Collection getBensDaUnidadeESubUnidades(GerenteDePatrimonio gp,String idUniMae){
System.out.println("idUniMae: "+idUniMae);
getBensDaUnidadeESubUnidadesRec(gp,idUniMae);
return unids;
}

private void getBensDaUnidadeESubUnidadesRec(GerenteDePatrimonio gp,String idUniMae) {
    try {
        Iterator uniInf = gp.pesquisaUnidadesPorSuperior(idUniMae);
        Collection col=null;
        System.out.println("************************col: "+col+"*******************");
        System.out.println("************************uniInf: "+uniInf+"*******************");
        System.out.println("Antes do if");
        System.out.println("uniInf.hasNext()"+uniInf.hasNext());
        if(uniInf!=null && uniInf.hasNext()){
            System.out.println("Entrou: if(uniInf!=null && uniInf.hasNext()");
            while(uniInf.hasNext()){
                trlg.patrimonio.Unidade   uni = (trlg.patrimonio.Unidade)uniInf.next();
                System.out.println("**********************uni: "+uni+"***********************");
                col=gp.getBensDaLocalizacao(uni,true);
                System.out.println("************************col: "+col+"*******************");
                System.out.println("Antes do unids.addAll(col)");
                [b]unids.addAll(col);[/b]
                System.out.println(unids);
                getBensDaUnidadeESubUnidades(gp,uni.getId());
            }
        }else{
            System.out.println("Entrou no else");
            trlg.patrimonio.Unidade uni = (trlg.patrimonio.Unidade)uniInf;
            System.out.println("************Passou de uni*************");
            [b]col=gp.getBensDaLocalizacao(uni,true);[/b]
            unids.addAll(col);
        }
    }catch (Exception ex) {
        System.out.println("Caiu na exceção do: getBensDaUnidadeESubUnidadesRec(GerenteDePatrimonio gp,String idUniMae)");
        ex.printStackTrace();
    }
}

[quote=midianet]se vc usar oracle consegue fazer isso via sql

[/quote]

Pois é rapaz, eu já fiz esse trabalho aí para montar um menu em árvore com métodos parecidos, meu problema aí é que eu consulto os bens de um departamento aí a medida que vou baixando o nível hierárquico, eu vou acumulando esses bens para mostrar em uma consulta de bens por departamento. por exemplo:

departamento de Recursos Humanos/
Demissão
Admissão
Quando eu consultar Recursos Humanos
devo retornar todos os bens tanto de recursos humanos quanto de seus subdepartamentos

Já citei anteriormente onde estou tendo problemas!!!
Caso seja sintaxe e alguém puder me ajudar, se for erro de lógica, imagino que eu mesmo terei que me virar por aqui.

se vc usar oracle consegue fazer isso via sql