Setando Valores com JPA e Query Dinâmica

Pessoal,
alguém poderia me ajudar com o seguinte problema, preciso criar uma pesquisa dinâmica usando JPA.

O problema é a setagem dos parametros.

Veja só, pensei em fazer as queries assim:

      StringBuffer consulta = new StringBuffer();
      consulta.append("SELECT RT FROM ResponsavelTecnicoED RT WHERE ");
      
      if (responsavelTecnicoED.getPessoaFisicaED() != null &&
            responsavelTecnicoED.getPessoaFisicaED().getTxtNome() != null) {
        
        consulta.append("UPPER(RT.pessoaFisicaED.txtNome) like :txtNome ");
        //Indica que Já Pode Colocar um AND na Frente da Consulta Dinamica
        jaExisteUmaCondicao = true;
        //Adiciona os Parametros da Query Aqui
        parametrosEValores.add("txtNome");
        parametrosEValores.add("%"+responsavelTecnicoED.getPessoaFisicaED().getTxtNome().toUpperCase()+"%");
      }
      if (responsavelTecnicoED.getPessoaFisicaED() != null && 
            responsavelTecnicoED.getPessoaFisicaED().getNroCpf() != null) {
        
        //Verifica a Existencia de um AND para Coloca-lo ou Não na Consulta
        if (jaExisteUmaCondicao) consulta.append("AND RT.pessoaFisicaED.nroCpf = :nroCpf ");
          else consulta.append("RT.pessoaFisicaED.nroCpf = :nroCpf ");
        
        //Adiciona os Parametros da Query Aqui
        parametrosEValores.add("nroCpf");
        parametrosEValores.add(responsavelTecnicoED.getPessoaFisicaED().getNroCpf());
      }
      ...

Ao final do processo eu preciso dar um

      Query query = em.createQuery(consulta.toString());
      for (Object o : parametrosEValores) {
        if (i == 0)
          query.setParameter(o.toString(), "%"+responsavelTecnicoED.getPessoaFisicaED().getTxtNome().toUpperCase()+"%");
      ...

Veja que eu tenho que percorrer um ArrayList para setar os parametros da query. Ou seja, ficou bem ruim, alguém tem uma solução melhor.

Desde já agradeço quem puder dar uma ajuda.

Att,
Regis

infelizmente com jpa 1.0 são necessárias concatenações de string e outras gambiarras hahahaha nao tem como fugir!!!

agora com jpa 2 da pra usar criteria por exemplo

abrassss