publicUsuariogetUser(Stringnome,Stringsenha){
try{
Stringjpql="SELECT u from Usuario u where u.nome = :nome and u.senha = :senha";Usuariousuario=(Usuario)manager.createQuery(jpql,Usuario.class).setParameter("nome",nome).setParameter("senha",senha).getSingleResult();returnusuario;}catch(NoResultExceptione){
returnnull;}
}
E o nome do Usuario está em maiúsculo mesmo, pesquisei bastante e ainda não encontrei uma solução, sendo que eu tenho uma query que está quase do mesmo jeito para listar os usuarios, está como SELECT u from Usuario u e funciona perfeitamente, gostaria de uma ajuda, obrigado desde já
O erro diz que Usuário não está mapeado! Vc precisa de uma classe Usuário q represente sua tabela, se tiver posta o código dela, mas FORMATADO.
darlan_machado
Ou a classe usuário não contém a anotação @Entity ou não está no arquivo .hbm.xml ou você não a está referenciando no persistence.xml ou você não está dizendo ao JPA que deve descobrir as entidades automaticamente.
H
Hugovms
Eu mudei a String e fiz assim SELECT u from "+Usuario.class.getName()+" u where u.nome = :name and u.senha = :senha
Deu mais ou menos certo, só que mudou o erro, agora fala que
javax.servlet.ServletException: java.lang.IllegalArgumentException: Parameter with that name [name] did not exist
o método ficou assim
publicUsuariogetUsuario(Stringnome,Stringsenha){
try{
Usuariousuario=(Usuario)manager.createQuery("SELECT u from "+Usuario.class.getName()+" u where u.nome = :name and u.senha = :senha").setParameter("name",nome).setParameter("senha",senha).getSingleResult();returnusuario;}catch(NoResultExceptione){
returnnull;}
}
Rodrigo_Void
Não cara.
Novamente não é um código formatado. Selecione o código e USE o botão < / > pra formatar.
Cadê a classe Usuario???
H
Hugovms
Modelo do usuário !
e foi mal, não sabia usar o negócio de formatar antes
Sim, tenho cruds com esse usuario funcionando e que tem esse select
Tenho esse List, que funciona perfeitamente
publicList<Usuario>listar(){
Stringjpql="select u from Usuario u";returnmanager.createQuery(jpql,Usuario.class).getResultList();}
Rodrigo_Void
Então n faz sentido funcionar em um lugar mas em outro sim.
Verifica os imports se estão igual ao lugar que funciona. Principalmente o import da classe Usuario, se é a correta.
H
Hugovms
Esse List também está dentro do Dao do usuário, os imports são os mesmos, realmente não faz nenhum sentido
Rodrigo_Void
Posta a DAO completa ai.
O método q n funciona é de validação de login? Não estarias criando a factory apenas depois do login?
H
Hugovms
Usuario Dao
Tá um pouco diferente o método da validação sem os setParam aí por que estou testando de outras maneiras .-.
publicclassUsuarioDao{privateEntityManagerFactoryfactory=Persistence.createEntityManagerFactory("pizzaria-dev");@PersistenceContextprivateEntityManagermanager=factory.createEntityManager();publicUsuariogetUsuario(Stringnome,Stringsenha){try{Usuariousuario=(Usuario)manager.createQuery("select u from "+Usuario.class.getName()+" u where u.nome = "+nome+" and u.senha = :"+senha).getSingleResult();returnusuario;}catch(NoResultExceptione){returnnull;}}publicvoidcadastrar(Usuariousuario){manager.persist(usuario);}publicList<Usuario>listar(){Stringjpql="select u from Usuario u";returnmanager.createQuery(jpql,Usuario.class).getResultList();}@Transactionalpublicvoiddeletar(Usuariousuario){manager.remove(manager.getReference(Usuario.class,usuario.getId()));}@Transactionalpublicvoideditar(Usuariousuario){manager.merge(usuario);manager.flush();}}
Rodrigo_Void
Isso vc pode desfazer, deixa só Usuario
H
Hugovms
Beleza, mas se eu deixar só Usuario aí volta a dar o erro que não acha a Entity
Rodrigo_Void
Sim, mas d qualquer jeito está com erro e deve funcionar com Usuario. Vc pode ter piorado e n avançado.
Chessuis, pelo amor de Deus, tira a concatenação da JPQL:
where u.nome = “+nome+” and u.senha = :"+senha
Usa parametros SEMPRE. Isso ai permite sql injection.
H
Hugovms
Beleza kkkk, fiz isso pra testar, e sqlinjection não é tanto um problema agora, que isso é uma atividade de curso
Deixei assim agora
publicUsuariogetUsuario(Stringnome,Stringsenha){
try{
Usuariousuario=(Usuario)manager.createQuery("select u from Usuario u where u.nome = :name and u.senha = :senha").setParameter("name",nome).setParameter("senha",senha).getSingleResult();returnusuario;}catch(NoResultExceptione){
returnnull;}
}
E ele volta o erro
javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [select u from Usuario u where u.nome = :name and u.senha = :senha]
Rodrigo_Void
Se certifica q neste momento da execução já foram mapeadas as classes.
Ou na mesma execução roda o outro comando q funciona antes deste, só pra testar.
H
Hugovms
Coloquei o método de listar antes e funcionou perfeitamente
publicList<Usuario>listar(){
Stringjpql="select u from Usuario u";returnmanager.createQuery(jpql,Usuario.class).getResultList();}
Rodrigo_Void
Vê se não é só adicionar o parametro Usuario.class depois da jpql
H
Hugovms
Fiz isso e continua o erro de Usuario is not Mapped
Rodrigo_Void
Vc conhece um bom padre q manje de exorcismos?
darlan_machado
Como você configurou isso?
H
Hugovms
Rodrigo, Tô precisando mesmo kkk, o java anda me trollando muito
Criei com Jboss forge, e depois coloquei dependencias no maven, o persistence.xml tá com o nome da pizzaria-dev lá etc
H
Solucao aceita
Hugovms
Depois de tanto apanhar ACHEI O BENDITO ERRO
No persistence.xml resolveu colocando
br.com.pizzaria.models.Usuario
Que indica onde está a classe do meu Usuário! Obrigado por quem tentou me ajudar!!!