Tenho uma list carregada com objetos por exemplo do tipo Pessoa, no entanto ao percorrer esta lista e tentar recuperar seus parametros, no caso nome e idade ocorre este erro :
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to projetohibernate.Pessoa
Logo abaixo segue o codigo:
public static void main(String[] args) {
List resultado = new ArrayList();
String select = "select * from pessoa";
Pessoa busca = new Pessoa();
resultado = busca.listaPessoa(select); // Aqui a list resultado é carregada com os objetos que vem do banco, a dificuldade é exatamente em recuperar o nome e a idade de
cada um deles
[b]for(Iterator iterator = resultado.iterator(); iterator.hasNext();){
Pessoa teste = (Pessoa) iterator.next();
System.out.print(teste.getNome());
}[/b]
}
Alguem poderia me ajudar, me explicar seila, porque pelo que pesquisei em varios lugares, este método era para dar certo hehe.
Ao que parece está ocorrendo um erro de Casting entre Object e o seu tipo Pessoa. Já que você sabe que vai usar um objeto do tipo Pessoa, então poderia experimentar declarar o ArrayList parametrizado já com o tipo Pessoa. Assim você dispensaria um Casting, e eliminaria o problema.
Ao invés de List resultado = new ArrayList(), você usaria:
ArrayList<Pessoa> resultado = new ArrayList<Pessoa>();
Assim o seu ArrayList seria explicitamente de objetos do tipo pessoa.
E aí poderia listar assim:
For(Pessoa teste : resultado){
System.out.print(teste.getNome());
}
Desde já eu aviso: nunca mexi com banco de dados, então posso estar falando beiteiras.
Mas pela exceção lançada vindo de um Objeto de Ljava.lang.Object, isso não seria um Cast de um Objeto pessoa direto para um String?
Talvez também se colar o StackTrace inteiro, fique mais fácil de entender o problema e identificar exatamente onde ele está ocorrendo.
Qual linha está lançando a exceção?
A linha que mostra o resultado da busca?
System.out.println("RESULTADO: "+resultado);
ou a linha que deveria imprimir no console o nome da pessoa no laço do Iterator?
System.out.print(teste.getNome());
ou seria outra?
Talvez lendo o help do Hibernate sobre esta função que você usou possa trazer alguma luz
Bodai toda ajuda é bem vinda, acho que tem algo a ver com passagem de um cas Objeto direto para uma String, pelo que pesquisei, porém já tentei de tudo e não da.
o erro acontece aqui >> Pessoa teste = (Pessoa) iterator.next();
colocarei o main inteiro aqui para facilitar:
public static void main(String[] args) {
List<Pessoa> resultado = new ArrayList<Pessoa>();
String select = "select * from pessoa";
Pessoa busca = new Pessoa();
resultado = busca.listaPessoa(select);
System.out.println(resultado); [b]>> aqui imprimi a lista com os objetos dentro << [[Ljava.lang.Object;@755c62bc, [Ljava.lang.Object;@45660d6][/b]
for(Iterator iterator = resultado.iterator(); iterator.hasNext();){
[b]Pessoa teste = (Pessoa) iterator.next(); >>>>> erro <<<<<<<[/b]
System.out.print(teste.getNome());
}
}
MENSAGEM DE ERRO : Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to projetohibernate.Pessoa
at projetohibernate.Main.main(Main.java:33)
Java Result: 1
Abaixo segue o metodo listaPessoa()
public List listaPessoa(String select){
Session sessao = HibernateUtil.getSessionFactory().openSession();
List lista = null;
Tinoberto, boiei AUHIUAH… Cara eu devo ta falando merda, mas é o seguinte, eu tenho somente uma classe Pessoa, e um dos métodos desta classe é o listaPessoa()
Se eu renomear ela para PessoaDAO, não vai mudar nada…
Classe Pessoa :
public class Pessoa implements java.io.Serializable {
Integer idPessoa;
private String nome;
private Integer idade;
métodos get e set da classe
e o listaPessoa(), que coloquei no post em cima..
se vc puder seila especificar mais, algum exemplo, as vezes eu to viajando aqui iuAuh
Vlw…
e sera que voce tem alguma solucao para este caso ?!
Alguma lógica que atenda a esta necessidade…se alguém souber…posta ae! Acredito que vai ajudar muitas pessoas, porque eu pesquisei um monte e não achei nada decente.
lista = sessao.createSQLQuery(select).list(); << tem algum jeito de eu falar pro Java que aqui serão somente pessoas, ele só aceita o .list()
Eu sou meio novatão no hibernate, se eu to sendo muito burro nem liga IUAHIAUh
Solução não tenho pois não conheço hibernate diretamente (uso a sintaxe do JPA).
Mas já que você é novo em hibernate, sugiro que leia algum livro sobre o assunto. Ou a própria documentação no site.
Com certeza este é um caso trivial e na documentação deve ter exemplos de como fazer isto.
Opa nem tinha me tocado, pode deixar ViniGodoy…cara aproveitando a deixa será que voce tem algum exemplo ou alguma solução ae de bate pronto para meu caso, é só subir e ver o código.
É simples acredito eu, quero varrer uma list carregada com objetos, dando um get em seus atributos.
Essa lista é carregada com uma SQLquery … select * from pessoa, pensava eu que estavam dentro da list array de objetos do tipo pessoa.
Seja la o que for, se voce ou alguém tiver um exemplo de como CARREGAR a list com somente pessoas usando o hibernate, e depois descarregar a lista imprimindo os atributos destes objetos.
Agradeço a atenção.
Tinoberto, li seu material, que por sinal muito bom, prático e fácil de entender, e finaaaaaaalmente consegui.
Po agradeço a atenção de todos por tentar solucionar meu problema, pensei que esse fórum não fosse aquelas coisas, mas tenho de elogiar e reconhecer que é realmente bom.
Certamente quando souber a solução de problemas do pessoal aqui vou cooperar.
E com certeza vão aparecer mais dúvidas. Muito bom o material Tinoberto, vou ler de cabo a rabo todas aquelas apostilas.
Flw…
Sem querer fazer propaganda mas essas apostilas são muito boas, sempre recomendo. Agora coloque resolvido no topico para facilitar a organização do forum, flw.