estou com uma duvida aqui, sou novo em java estou estudando não faz mtu tempo, estou utilizando o hibernate-annotations para mapear as classes e funcionou blz qdo eu tentei inserir, atualizar e deletar dados…
mais ontem eu fui tentar navegar pelos registros escrevendo eles com println()
Session session = new HibernateFactory().getSession();
Iterator iter = session.createQuery("select iduser, login from usuarios").iterate();
while ( iter.hasNext() ) {
Usuarios qux = (Usuarios) iter.next();
System.out.println(qux.getLogin());
}
e recebe esse erro
axei estranho pq eu mapiei com hibernate-annotations e ainda vou ter que criar akeles xml’s xatos ???
aqui está minha classe usuarios sem o getters e setters
Seu erro não sei te dizer o que é ainda, também não tenho experiência com hibernate hehe… , parece que seu select está errado, ele deve retornar um list. Mas se vc usa anotações, não precisa mapear com xml. No site do Hibernate tem um pdf “hibernate_reference” que tem um monte de HQL la.
Duas coisas.
1 - Ao dar select em duas colunas, ele não vai trazer para você um objeto Usuarios (nome da sua classe). Vai trazer um Object[]. Você em hql pode omitir o select e fazer from alguma coisa: from ClasseX.
2 - Acho que você tem que usar o nome da classe: Usuarios. E não usuarios. Assim ele não entende.
sidneycarlos65: antes eu havia tentado com list tbm, mais acontecia o mesmo erro…
fiaux: é isso mesmo cara, coloquei Usuarios e deu certo, não sabia que esse SQL ou HQL era case sensitive.
com list funcionou normal, mais com iterator está dando erro
Hibernate:
select
usuarios0_.login as col_0_0_
from
usuarios usuarios0_
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to testehibernate.Usuarios
at testehibernate.Main.main(Main.java:55)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
sabe oq pode ser ?
eu estou pegando exemplos do site www.java2s.com, axei mtu bom, mais alguem conhece algum outro site que tenha mais exemplos de hibernate ?
Como está fazendo? Mostra o código. É a mesma query?
Na verdade o problema não é ser case sensitive, mas é que você disse ao hibernate que Usuarios, sua classe, é uma @Entity, então ele sabe que o nome dele é o nome da classe.
acho que estou entendendo melhor então, qdo usei “select iduser, login from usuarios” eu pensava estar fazendo um select na tabela, mais pelo o que eu entendi é na classe ? e a classe se encarrega do resto ?
Creio que o problema seja o que o fiaux disse anteriormente.
já que Usuarios tem os atributos iduser, login, senha e acesso, quando vc faz o HQL buscando apenas alguns desses campos ele vai retornar um vetor de Objetos e não um vetor de Usuarios
sendo assim, vai dar ClassCastException mesmo
vc precisa tratar o retorno (quando busca apenas alguns campos) como um Object[]
É um select na tabela mapeada para sua classe, o hibernate se encarrega do resto, é como diz o tutorial aqui do GUJ, você de livra do SQL no código. Ele fica responsável por isso. Você quer trazer todos os Usuarios? Porque não fazer o hql como “from Usuarios”, deixar ele montar a List de objetos Usuarios, com todos os atributos, de maneira completa, e retornar?