Problema com consulta ordenada de PessoaFisica e PessoaJuridica

Tenho doi tipo de cliente no banco, Cliente Fisico e Cliente Juridico, e na busca de clientes eu posso escolher qual deles eu quero buscar, ou buscar os dois, para isso tenho duas Procedures, uma pra cada cliente.
deixe eu explicar a estrutura da classe para isso para poder explicar minha duvida…

Tenho uma classe abstrata pessoa, uma classe PessoaFisica que erda de Pessoa e o mesmo para Pessoa juridica, minha classe cliente Possue um atributo do tipo Pessoa, e quando instancio o cliente, passo um objeto pessoaFisica ou Juridica como parametro do costrutor, e no construtor do cliente eu atribui o atributo pessoa ao objeto q eu passei por parametro…bele…agora vou explicar minha duvida:

Na minha classe cliente tenho dois buscar, um pra Fisico e outro Pra juridico.

Classe consultarPf:

    public Vector consultarPf(int codigo, String nome,String estado, int cidade,String cpf,String rg , String bloqueio,String tipoestab){
        
        Connection conexao = null;
        PreparedStatement state = null;
        ResultSet rs = null;
        
        Vector retorno = new Vector();
        Vector clientes = new Vector();
        Vector fisicas = new Vector();
        
        try{
            conexao = Conexao.getConexao();
            
            state = conexao.prepareStatement(sqlBuscar);
            state.setInt(1,codigo);
            state.setString(2,nome);
            state.setString(3,estado);
            state.setInt(4,cidade);
            state.setString(5,cpf);
            state.setString(6,rg);
            state.setString(7,bloqueio);
            state.setString(8,tipoestab);
            
            rs = state.executeQuery();
            
            while(rs.next()){
                
                PessoaFisica fisica = new PessoaFisica();
                Cliente cliente = new Cliente(fisica);
                
                fisica.setPs_bairro(rs.getString("ps_bairro"));
                fisica.setPs_cep(rs.getString("ps_cep"));
                fisica.setPs_fk_cd_id(rs.getInt("ps_fk_cd_id"));
                fisica.setPF_cpf(rs.getString("pf_cpf"));
                fisica.setPs_complemento(rs.getString("ps_complemento"));
                fisica.setPs_dataCadastro(rs.getString("ps_datacadastro"));
                fisica.setPs_email(rs.getString("ps_email"));
                fisica.setPs_endereco(rs.getString("ps_endereco"));
                fisica.setPs_fax(rs.getString("ps_fax"));
                fisica.setPs_fone(rs.getString("ps_fone"));
                fisica.setPs_foneContato(rs.getString("ps_fonecontato"));
                fisica.setPF_rg(rs.getString("pf_rg"));
                fisica.setPs_nome(rs.getString("ps_nome"));
                fisica.setPs_nomeContato(rs.getString("ps_nomecontato"));
                fisica.setPs_numEndereco(rs.getString("ps_numendereco"));
                fisica.setPs_observacao(rs.getString("ps_observacao"));
                fisica.setPs_id(rs.getInt("ps_id"));
                
                fisicas.add(fisica);
                
                cliente.setCidadeNome(rs.getString("cd_nome"));
                cliente.setCl_bloqueio(rs.getBoolean("cl_bloqueio"));
                cliente.setCl_codCliente(rs.getString("cl_codcliente"));
                cliente.setCl_tipoEstabelecimento(rs.getString("cl_tipoestabelecimento"));
                cliente.setUfSigla(rs.getString("Uf_sigla"));
                clientes.add(cliente);
            }
            
            
            retorno.add(fisicas);
            retorno.add(clientes);
        }catch(Throwable e){
            JOptionPane.showMessageDialog(null, sqlBuscar);
            e.printStackTrace();
            return null;
        }finally{
            try{
                if (conexao != null)
                    conexao.close();
                if(state != null)
                    state.close();
            }catch(Throwable e){
                e.printStackTrace();
                return null;
            }
            return retorno;
        }
    }

e o PJ é a msm coisa, só mudando:

                PessoaFisica fisica = new PessoaFisica();
                Cliente cliente = new Cliente(fisica);

para

                PessoaJuridica juridica = new PessoaJuridica();
                Cliente cliente = new Cliente(juridica);

e a parte de do set do objeto,

Agora o problema é o seguinte quando eu quero consultar os dois eu tenho q executar as duas funcoes, e para mostar na tabela, nao vao estar ordenados , pq ele vai ordena os resultados da primeira busca, e depois da segunda busca, e nao todos os resultados juntos, como faria isso, aceito outros metodos de consultar, esse que eu fiz é o q eu acho q tem q fazer, caso nao seja estou aberto para novas opniões, obrigado.

Você pode usar a Interface Comparator para ordenar a lista de pessoas, seja ela jurídica ou física. É uma solução caso não consiga a ordenação direto pela Query.

http://java.sun.com/javase/6/docs/api/java/util/Comparator.html

Pesquise sobre ela…

[]