Problema com consulta nativa do JPA (falha ao converter [])
12 respostas
P
paulohperes
Pessoal,
Vejam, tenho em uma classe Dao este método:
publicList<Object[]>listB(){Queryquery=entityManager.createNativeQuery("SELECT ITEM, ASSET, NAME, STATUS, DESCRIPTION FROM ADMIN.ASSET WHERE ASSET_TYPE_REF = 3 AND STATUS = 'A'");returnquery.getResultList();}
e depois chamo ele e tento pegar os valores assim:
algum motivo pra você querer uma Lista de Array de Object?
só um detalhe… um Array também é um object. Object obj = new Object[10]; Isso compila.
P
paulohperes
Poderia me explicar melhor?
Rodrigo_Sasaki
Claro
você está gerando uma lista de Arrays de Objects, certo?
provavelmente vai iterar essa lista, e iterar o array também, não sei. Mas vamos para o básico
Lembra quando falaram que todo mundo herda de Object? ou seja, Object é o primeirão, se você for subindo na cadeia de herança de qualquer classe, alguma hora chega nele.
O mesmo é valido para um array, um array de qualquer coisa também é um Object. Não sei se expliquei muito bem , deu pra entender?
mas enfim, isso não parece ser o causador do seu erro. você pode explicar melhor o por que precisa de um Array de Object?
P
paulohperes
Preciso do array para pegar os campos da consulta no banco.
Dentro de cada item da sua lista você vai ter um array? Porque pela sua query, não me parece correto.
P
paulohperes
isto para cada item da list eu tenho um array.
P
paulohperes
Veja estou seguindo exatamente um tutorial:
Iterator<Object[]>results=em.createQuery("select cat.color, min(cat.birthdate), count(cat) from Cat cat "+"group by cat.color").getResultList().iterator();while(results.hasNext()){Object[]row=results.next();Colortype=(Color)row[0];Dateoldest=(Date)row[1];Integercount=(Integer)row[2];.....}
Rodrigo_Sasaki
nunca fiz dessa maneira, por que não instancia um Iterator<Object[]> como está no seu tutorial?
Não não, no seu exemplo a query alimenta diretamente o Iterator<Object[]>, no seu caso você popula uma lista primeiro.
Outra (provável) solução seria remover o cast que você faz na atribuição. O seu problema está em tentar fazer um cast de java.util.Vector para um array de Object.
P
paulohperes
fiz igualzinho do tutorial, mesmo erro…
P
paulohperes
Digão…
Usando um pouco a cabeça consegui resolver…
Ao inves de retornar um Iterator<Object[]> fiz ele retornar um Iterator, porque fiz assim, desta forma ele nao vai converter de Vector para Object.
Não sei se tem a ver, mas o tutorial que eu segui é do JPA sendo implmentado pelo Hibernate, porém estou usando o Toplink da Oracle…