Então @fercampospinheiro, o real problema que tenho é o seguinte:
Atualmente estou desenvolvendo um sistema utilizando um banco de dados legado na empresa, DB2 mainframe
Com a complexidade de relacionamento das tabelas e a simplicidade do retorno decidi, inicialmente, criar um entity (Unidade.class) apenas com os campos que desejo trabalhar e converter o resultado do meu select já nesta unidade.
O que está acontecendo e que quando eu faço a query direto já especificando o tipo de objeto que é esperado, dentro do createNativeQuery
, não sei por qual motivo a primeira linha vem repetida.
Se eu pego a mesma query e executo no DB2 o resultado vem correto. Esta na verdade foi a única forma que eu consegui fazer funcionar, transformar em um objeto genérico, e agora quero jogar ele para o objeto que desejo, Unidade.class.
Ficou assim a parte de conversão para Lista:
public List getlistaUnidade(List lista){
List unidades = new ArrayList();
for(Object obj : lista){
Unidade unidadeUnit = new Unidade();
Object[] obUnit = (Object[]) obj;
unidadeUnit.setNumeroPv(new Long(String.valueOf(obUnit[0])));
unidadeUnit.setNomePv(String.valueOf(obUnit[1]));
unidadeUnit.setStatusVinculacao(String.valueOf(obUnit[2]));
unidadeUnit.setTipoServico(Integer.parseInt(String.valueOf(obUnit[3])));
unidadeUnit.setStatus(String.valueOf(obUnit[4]));
unidadeUnit.setCidade(String.valueOf(obUnit[5]));
unidadeUnit.setBairro(String.valueOf(obUnit[6]));
unidadeUnit.setLogradouro(String.valueOf(obUnit[7]));
unidadeUnit.setNumeroCep(Integer.parseInt(String.valueOf(obUnit[8])));
unidadeUnit.setNumeroCepComplemento(Integer.parseInt(String.valueOf(obUnit[9])));
unidadeUnit.setUf(String.valueOf(obUnit[10]));
unidades.add(unidadeUnit);
}
return(unidades);
}
É fato que isso mais para frente vai dar zebra. Já verifiquei o dialect que está na configuração do JPA e está certo. Peguei a query que o JPA gera no log do jboss e executei no db2 e o resultado vem corretor mas quando jogo dentro do código convertendo direto, não vem certo.
Atualmente está assim:
public List<Unidade> buscarUnidadeGenerica(int numeroCeps, int numeroComplementoCeps){
String query = " SELECT ... FROM ..... WHERE ...."
List<Object> lista = (List<Object>) em.createNativeQuery(query)
.setParameter(1, numeroCeps)
.setParameter(2, numeroComplementoCeps)
.getResultList();
return getlistaUnidade(lista);
Sei que o certo, mas não está funcinando, seria:
public List<Unidade> buscarUnidadeGenerica(int numeroCeps, int numeroComplementoCeps){
String query = " SELECT ... FROM ..... WHERE ...."
return em.createNativeQuery(query, Unidade.class)
.setParameter(1, numeroCeps)
.setParameter(2, numeroComplementoCeps)
.getResultList();
Esse mapeamento que você diss eu tentei fazer mas sem sucesso.
Já pegou algum problema nesse sentido?