Metodo que busca a hierarquia em uma tabela auto associativa

2 respostas
A

boa noite

eu estou com o seguinte metodo:

public List<VOInstituicao> buscaHieraequia(int idtInstituicao){
        List<VOInstituicao> lista = new ArrayList<VOInstituicao>();
        PreparedStatement ps = null;
        ResultSet rs = null;
        VOInstituicao vo = null;

        String query = "select nme_instituicao,cod_instituicao_pai from tb_instituicao where idt_instituicao = "+idtInstituicao;

        try {
            ps = this.getCnn().prepareStatement(query);
            rs = ps.executeQuery(query);

         if(rs.next()){
             vo = new VOInstituicao();
             vo.setCodInstituicaoPai(rs.getInt("cod_instituicao_pai"));
             vo.setNmeInstituicao(rs.getString("nme_instituicao"));
             lista.add(vo);
         }
            while(true){
             
            String query2 = "select nme_instituicao,cod_instituicao_pai from tb_instituicao where idt_instituicao = "+ vo.getCodInstituicaoPai();// Não esta funcionando daqui para baixo, ele so pega o primeiro pai
            PreparedStatement ps2 = this.getCnn().prepareStatement(query2);
             ResultSet rs2 = ps.executeQuery(query2);
             vo = new VOInstituicao();

             while(rs2.next()){
             vo.setCodInstituicaoPai(rs2.getInt("cod_instituicao_pai"));
             vo.setNmeInstituicao(rs2.getString("nme_instituicao"));
             lista.add(vo);

             if(vo.getCodInstituicaoPai() == null){
                    break;
                }
            }
          }
        } catch (SQLException ex) {
            Logger.getLogger(DAOInstituicao.class.getName()).log(Level.SEVERE, null, ex);
        }
   
        return lista;
    }

a minha intenção é trazer uma lista da hierarquia do objeto escolhido, mas meu metodo esta entrando em loop,
se alguem puder me ajudar eu serei eternamente grato

Muito Obrigado.

2 Respostas

Daniel_Hardt_Lima

Seu método entra em loop devido ao “while(true)”. Não há nenhum comando com break ou return para ele.

pmlm

Conheces o conceito de recursividade? Vais precisar para fazeres o método correctamente.

Criado 13 de dezembro de 2010
Ultima resposta 31 de dez. de 2010
Respostas 2
Participantes 3