Consulta com Native Query retornando erro

9 respostas
renatorudolf

Bom dia

Tem como fazer consulta com nativeQuery em duas base de dados diferente ?

tenho o método:

public List<MinhaClasse> retornaChamado(){
		Query query = em.createNativeQuery("select * from DataBase1..tabela1 inner join DataBase2..tabela2 on DataBase1..tabela1.id = DataBase2..tabela2.id_tabela1"); 
		return query.getResultList();
	}

me retorna o erro:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.com.exemplo.modelo.MinhaClasse

9 Respostas

DaniloAndrade

se vc fizer isso no console do seu banco de dados funciona?

renatorudolf

opá iae DaniloAndrade blz,

funciona sim cara, só mudei o nome do banco e das tabelas

sabe como resolver isso ? pois tá fod.

DaniloAndrade

e qual objeto vc quer retornar?

renatorudolf

Preciso juntar duas tabelas uma em cada DataBase

renatorudolf

o objeto MinhaClasse

DaniloAndrade

quando

select * from DataBase1..tabela1 inner join DataBase2..tabela2 on DataBase1..tabela1.id = DataBase2..tabela2.id_tabela1

e faz join entre tabela as colunas retornadas no select serão um jução das tabelas do join provavelmente por isso ta dando ClassCastException, ai nesse caso vc tem que decidir qual tabele ser retornada e colocar no select

ex:

select tabela1.* from DataBase1..tabela1 inner join DataBase2..tabela2 on DataBase1..tabela1.id = DataBase2..tabela2.id_tabela1
Hebert_Coelho

Esse post mostra como utilizar native query: JPA Consultas e Dicas.

R

Precisa colocar um cast no getResultList(), assim:

return (List<MinhaClasse>)query.getResultList();
renatorudolf

DaniloAndrade deu certo era isso mesmo, fiz assim:

public List<Object[]> retornaChamado(){
		Query objResult = em.createNativeQuery("select DataBase1..Tabela1.id, DataBase1..Tabela1.nome, DataBase2..Tabela2.estatos, DataBase2..Tabela2.descricao from DataBase1..Tabela1 inner join DataBase2..Tabela2 on DataBase1..Tabela1.id = DataBase2..Tabela2.id_tabela1"); 
		return objResult.getResultList();
	}

e numa classe main por exemplo fico:

EntityManager em = new JPAUtil().getEntityManager();
		ChamadoDAO dao = new ChamadoDAO(em);
		em.getTransaction().begin();

List<Object[]> chamados = dao.retornaChamado();
		for (Object[] chamado : chamados) {
			Integer id = (Integer)chamado[0];
			String nome = (String)chamado[1];
			String estatos = (String)chamado[2];
			String descricao = (String)chamado[3];
			System.out.println(id);
			System.out.println(nome);
			System.out.println(estatos);
			System.out.println(descricao);
			System.out.println();
		}

em.getTransaction().commit();
		em.close();

Tive que tratar todos os dados um de cada.

Criado 30 de janeiro de 2013
Ultima resposta 30 de jan. de 2013
Respostas 9
Participantes 4