Os dados retornados de uma consulta do Hibernate são do tipo List, estava usando antes com SQL um método que retornava dados do tipo Result para preencher um dataTable, como posso fazer isso agora com Hibernate?
O dataTable não aceita List e também não é possível converter List para Result.
Na página JSF o código não foi mudando e estava funcionado sem o hibernate, se eu fizer o hibernate mostrar o resultado por System.out.println funciona…
Obrigado pela ajuda…
J
javaldirPJ
Com certeza não eh por isso…
ResultSet e List são Collection
que eh necessaria pra montar um dataTable.
o problema eh algum parse de String pra Integer
em algum bloco de codigo seu…
M
marcossousaPJ
Hummm… afinal ele retorna uma lista de que objeto? Poste o código do seu data table e techos do seu backing bean aí.
Use o debug do eclipse para ver ser que esta lista retorna. Porque o problema está neste método que está selecionando aí.
:joia:
F
fpmxPJ
Uso o netbeans e debugando os dados são retornados sim, mas não consigo exibir na página JSF…
F
fpmxPJ
Quando chega na linha CidadeDTO cidadeDTO = (CidadeDTO) iter.next(); do código abaixo esta dando esse erro: java.lang.ClassCastException: [Ljava.lang.Object;
public void listarTodos() throws HibernateException {
Session sessao = HibernateUtility.getSession();
try {
Query select = sessao.createSQLQuery("SELECT * FROM Cidades");
List objetos = select.list();
for (ListIterator iter = objetos.listIterator(); iter.hasNext() ; ) {
CidadeDTO cidadeDTO = (CidadeDTO) iter.next();
Listagem(cidadeDTO);
}
} finally {
sessao.close();
}
}
Se eu colocar assim:
publicvoidlistarTodos()throwsHibernateException{Sessionsessao=HibernateUtility.getSession();try{Queryselect=sessao.createSQLQuery("SELECT * FROM Cidades");Listobjetos=select.list();for(ListIteratoriter=objetos.listIterator();iter.hasNext();){//CidadeDTO cidadeDTO = (CidadeDTO) iter.next();//Listagem(cidadeDTO);System.out.println(iter.next());}}finally{sessao.close();}}
Retorna isso, existe 3 registros no BD, parece que não esta conseguindo fazer o CAST para recuperar os dados, o problema acho que nem chega na página JSF, o que estou fazendo errado?
Hibernate: /* dynamic native SQL query */ SELECT * FROM Cidades
[Ljava.lang.Object;@1171b26
[Ljava.lang.Object;@1f78040
[Ljava.lang.Object;@50988
F
fpmxPJ
Outra coisa que acontece se eu substituo a linha:
Query select = sessao.createSQLQuery(“SELECT * FROM Cidades”);
Será que o problema é só no CAST ou tem algum xml que está com problemas também?
Obrigado pela ajuda… espero conseguir utilizar o hibernate!
F
fpmxPJ
Ae pessoal, consegui resolver o problema converti para Object[] e depois coloquei numa collection, não sei se essa é a melhor forma de fazer, se além tiver um jeito melho por favor poste aqui, segue abaixo o código, obrigado a todos:
public Collection getListar() throws HibernateException {
Collection colListarCidades;
//Abrindo uma sessão
Session sessao = HibernateUtility.getSession();
//Iniciando uma transação
Transaction transaction = sessao.beginTransaction();
List result = sessao.createSQLQuery("SELECT * FROM Cidades").list();
Iterator objetos = result.iterator();
colListarCidades = new ArrayList();
for (int i = 0; i < result.size(); i++) {
Object[] tuple = (Object[])objetos.next();
CidadeDTO cidadeDTO = new CidadeDTO();
cidadeDTO.setCidadeID((Integer)tuple[0]);
cidadeDTO.setCidade((String)tuple[1]);
cidadeDTO.setUf((String)tuple[2]);
colListarCidades.add(cidadeDTO);
}
//persistente no banco de dados
transaction.commit(); //Finalizando a transação
sessao.close(); //Fechando a sessão
return colListarCidades;
}
Outra coisa estranha é que não consigo usar o createQuery conforme já descrito antes e também tem um campo no BD que é char(2) e não funciona tive que deixar varchar(2)…
C
cazevedoPJ
faz assim :
ListDataModel saida = new ListDataModel(suaLista);
e retorna um tipo ListDataModel no seu bean.
o dataTable aceita numa boa.
F
fpmxPJ
Tentei fazer usando o ListDataModel mas deu o mesmo problema de antes…
Esta imprimindo no console corretamente, porém o JSF não consegue recuperar esses valores na sessão, será que por fazer: Session sessao = HibernateUtility.getSession(); ele perde a sessão, alguém sabe como posso resolver isso?