Olá pessoal, não sei se postei no lugar certo mas, estou com um problema, estou aprendendo Hibernate e estou tentando pegar o usuario e senha no banco para verificar se o rapaz é cadastrado. Quero fazer mais ou menos isso:
publicclassUsuarioDAO{privateConnectionconnection;publicUsuarioDAO(){connection=newConnectionFactory().getConnection();}publicbooleanexisteUsuario(Usuariousuario){try{PreparedStatementstmt=this.connection.prepareStatement("select * from usuarios where login = ? and senha = ?");stmt.setString(1,usuario.getLogin());stmt.setString(2,usuario.getSenha());ResultSetrs=stmt.executeQuery();booleanencontrado=rs.next();rs.close();stmt.close();returnencontrado;}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Porém com hibernate, porém não sei como faço… seria com o Criteria? alguem me da uma luz?
tentei com isso aqui porém não tá dando certo:
Você pode fazer o seguinte: setar a pk e usar um find. Algo do tipo (não sei se é bem essa a sintaxe do cara, mas aí vai):
public Usuario findById(Long id) {
Usuario usuario = new Usuario();
usuario.setId(id);
return entityManager.find(usuario);
}
O ideal é debugar pra ver se aquele find ali acha o certo (se não achar, provavelmente vem o null ou dá um throw new NullAlgumaCoisaException).
desk
Olá brother, tentei do jeito que vc falou mas não consegui não, oque seria esse entitymanager.find(usuario) ai? dei uma melhorada e meu codigo agora está assim porém não está funcionando:
publicclassAdminDAO{privatefinalSessionsession;publicAdminDAO(){session=newHibernateUtil().getSession();}publicAdminsverificaAdmin(Adminsadmin){Queryquery=session.createQuery("from Admins where login = :pLogin and senha = :pSenha");query.setParameter("pLogin",admin.getLogin());query.setParameter("pSenha",admin.getSenha());return(Admins)query.uniqueResult();}}
Quando rodo o formulario de logar e boto o login, senha ele causa uma exception, pelo que intendi a query que coloquei está errada, mas acho que está certa.
Grato
L
lgweb
posta o erro ai pra gente dar uma oolhada ai fica mais facil te ajudar.
Lavieri
O código deveria ser assim:
publicclassAdminDAO{privatefinalSessionsession;publicAdminDAO(){session=newHibernateUtil().getSession();}publicAdminsverificaAdmin(Adminsadmin){//no caso com o trecho "Admins a" é o mesmo que "Admins as a"Queryquery=session.createQuery("from Admins a where a.login = :pLogin and a.senha = :pSenha");query.setParameter("pLogin",admin.getLogin());query.setParameter("pSenha",admin.getSenha());return(Admins)query.uniqueResult();}}
desk
Lavieri:
O código deveria ser assim:
publicclassAdminDAO{privatefinalSessionsession;publicAdminDAO(){session=newHibernateUtil().getSession();}publicAdminsverificaAdmin(Adminsadmin){//no caso com o trecho "Admins a" é o mesmo que "Admins as a"Queryquery=session.createQuery("from Admins a where a.login = :pLogin and a.senha = :pSenha");query.setParameter("pLogin",admin.getLogin());query.setParameter("pSenha",admin.getSenha());return(Admins)query.uniqueResult();}}
Brother, tentei assim mas continua na mesma.
Segue a exception:
persistence.xml é o arquivo onde põe as coisas do hibernate? configurações? se for não estou usando isso, fiz apenas o hibernate.properties e estou usando por anotações. O nome da tabela é Admins
LPJava:
so uma dica para o autor do topico, nao use SQL dentro do seu hibernate. Tente deixo o mais abstrato possivel.
Veja se esse meu post de busca ti ajuda.
então vc diz que tem 1 jeito melhor de fazer? ao inves do createquery? vi no link que vc mandou e lá também está ± assim…
Obrigado a todos que estão me ajudando, ja tentei varias coisas aqui mas o erro persiste, da quase sempre a mesma exception… porem pelo que percebo está tudo nos conformes
Andre_Brito
persistence.xml é o arquivo onde põe as coisas do hibernate? configurações? se for não estou usando isso, fiz apenas o hibernate.properties e estou usando por anotações. O nome da tabela é Admins
É que voce precisa dizer algumas coisas (como o endereço do banco, senha, usuario e coisas do tipo…). Só não lembro se é necessário fazre isso também num sistema que não usa um servidor.
Sobre essa parte de sql, o ideal seria usar o find ou jpql (ou ainda hql). É mais simples… E você poderia usar @NamedQuery no seu entity que tudo pode ficar mais fácil na hor de fazer uma consulta.
Uma pergunta: você está usando servidor ou só os jars do hibernate (quais jars você está usando?)? Se você quiser esperar, no final de semana eu posso bolar algum exemplo pra você aqui. Não faço isso no decorrer da semana pela falta de tempo mesmo…
desk
persistence.xml é o arquivo onde põe as coisas do hibernate? configurações? se for não estou usando isso, fiz apenas o hibernate.properties e estou usando por anotações. O nome da tabela é Admins
É que voce precisa dizer algumas coisas (como o endereço do banco, senha, usuario e coisas do tipo…). Só não lembro se é necessário fazre isso também num sistema que não usa um servidor.
Sobre essa parte de sql, o ideal seria usar o find ou jpql (ou ainda hql). É mais simples… E você poderia usar @NamedQuery no seu entity que tudo pode ficar mais fácil na hor de fazer uma consulta.
Uma pergunta: você está usando servidor ou só os jars do hibernate (quais jars você está usando?)? Se você quiser esperar, no final de semana eu posso bolar algum exemplo pra você aqui. Não faço isso no decorrer da semana pela falta de tempo mesmo…
Eai brother, então. no hibernate properties eu puis esses dados (endereço do banco,senha,dialeto,etc), estou usando os jars do hibernate… baixei o hibernate annotations e hibernate… peguei todos que veio.
com find e @namedquery ficaria melhor? hehe é porque sou iniciante e nem intendo muito, oque seria? me dar exemplos?
Tranquilo, se vc poder me dar uns exemplos disso ai no fim de semana ficarei grato hehe, vlw mesmo!
Abraços
LPJava
persistence.xml é o arquivo onde põe as coisas do hibernate? configurações? se for não estou usando isso, fiz apenas o hibernate.properties e estou usando por anotações. O nome da tabela é Admins
LPJava:
so uma dica para o autor do topico, nao use SQL dentro do seu hibernate. Tente deixo o mais abstrato possivel.
Veja se esse meu post de busca ti ajuda.
então vc diz que tem 1 jeito melhor de fazer? ao inves do createquery? vi no link que vc mandou e lá também está ± assim…
Obrigado a todos que estão me ajudando, ja tentei varias coisas aqui mas o erro persiste, da quase sempre a mesma exception… porem pelo que percebo está tudo nos conformes
HQL é similar ao SQL. Ainda bem ne?
vamos lá fiz o code agora aqui so para vc ter ideia do que precisa fazer para conseguir o cara certo durante o login.
Vamos dizer que o login eh o email do usuario, entao vc no seu BD vai ter o campo email como unique. uma vez que vc retornar o objeto do usuario que o email é igual ao digitado vc, pode navegar ate o campo senha e verificar se digitou corretamente, sem precisar fazer uma clausula HQL para senha.
publicUsuarioverificar(Stringemail){begin(); Queryq=getSession().createQuery("from Usuario where email = :email");q.setString("email",email); Usuariousuario=(Usuario)q.uniqueResult();commit();returnusuario;}
Se vc usa JSF para seu viu, no seu controlador poderia ter algo assim:
//verificar o email e a senha - usando na pagina de loginpublicStringverificar(){UsuarioDAOusuariodao=newUsuarioDAO();Usuarious=usuariodao.verificar(usuario.getEmail());if(us.getEmail().equals(usuario.getEmail())&&us.getSenha().equals(usuario.getSenha())){return"loginok";}else{return"logininvalid";}
tente implementar dessa forma, depois vc vai refatorando e aprimorando.
flw! qualquer coisa so gritar.
desk
persistence.xml é o arquivo onde põe as coisas do hibernate? configurações? se for não estou usando isso, fiz apenas o hibernate.properties e estou usando por anotações. O nome da tabela é Admins
LPJava:
so uma dica para o autor do topico, nao use SQL dentro do seu hibernate. Tente deixo o mais abstrato possivel.
Veja se esse meu post de busca ti ajuda.
então vc diz que tem 1 jeito melhor de fazer? ao inves do createquery? vi no link que vc mandou e lá também está ± assim…
Obrigado a todos que estão me ajudando, ja tentei varias coisas aqui mas o erro persiste, da quase sempre a mesma exception… porem pelo que percebo está tudo nos conformes
HQL é similar ao SQL. Ainda bem ne?
vamos lá fiz o code agora aqui so para vc ter ideia do que precisa fazer para conseguir o cara certo durante o login.
Vamos dizer que o login eh o email do usuario, entao vc no seu BD vai ter o campo email como unique. uma vez que vc retornar o objeto do usuario que o email é igual ao digitado vc, pode navegar ate o campo senha e verificar se digitou corretamente, sem precisar fazer uma clausula HQL para senha.
publicUsuarioverificar(Stringemail){begin(); Queryq=getSession().createQuery("from Usuario where email = :email");q.setString("email",email); Usuariousuario=(Usuario)q.uniqueResult();commit();returnusuario;}
Se vc usa JSF para seu viu, no seu controlador poderia ter algo assim:
//verificar o email e a senha - usando na pagina de loginpublicStringverificar(){UsuarioDAOusuariodao=newUsuarioDAO();Usuarious=usuariodao.verificar(usuario.getEmail());if(us.getEmail().equals(usuario.getEmail())&&us.getSenha().equals(usuario.getSenha())){return"loginok";}else{return"logininvalid";}
tente implementar dessa forma, depois vc vai refatorando e aprimorando.
flw! qualquer coisa so gritar.
eai brother, então. fiz igual oque vc fez ai porem da a mesma exception …
org.hibernate.hql.ast.QuerySyntaxException: Admins is not mapped [from Admins where login = :login]
porem no meu codigo nao tem esse begin() e commit()… não consegui por, oque são?
Grato.
Andre_Brito
Provavelmente são funções nas quais ele gerencia as transações. Não sei o jeito dele programar, só um chute mesmo.
Essa exception dá porque o Admins não tá mapeado cara… Acho que você tem que configurar naquele persistence.xml que lhe falei… Quais jars você está usando?
LPJava
opa! Cara, foi malz esqueci de colocar de onde vem o begin e o commit, veja:
importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;publicclassDAO{privatestaticfinalSessionFactorysessionfactory=newConfiguration().configure().buildSessionFactory();privatestaticfinalThreadLocalthreadlocal=newThreadLocal();publicDAO(){// TODO Auto-generated constructor stub}publicstaticSessiongetSession(){Sessionsession=(Session)threadlocal.get();if(session==null){session=sessionfactory.openSession();threadlocal.set(session);}returnsession;}publicvoidbegin(){getSession().beginTransaction().begin();}publicvoidcommit(){getSession().beginTransaction().commit();}
Provavelmente são funções nas quais ele gerencia as transações. Não sei o jeito dele programar, só um chute mesmo.
Essa exception dá porque o Admins não tá mapeado cara… Acho que você tem que configurar naquele persistence.xml que lhe falei… Quais jars você está usando?
Cara mas não intendo, o Admins tá com os negocios todos do hibernate lá … como já mostrei a classe aqui no topico. Estou usando o jar do hibernate e hibernate annotations, baixei no site e peguei todos que vieram na pasta e joguei na lib.
Po, acho que tive 1 evolução haha, tá dando otra exception agora… pelo que intendi ele não tá conseguindo chamar a action mas não sei… no action do formulario tá certinho de acordo com o struts… login, vo mandar as classes
publicclassAutorizadorAdminAction{privateAdminsadmin;privateAdminDAOadminDao=newAdminDAO();// quando ponho esse autenticado dentro do metodo login ali ele volta a dar aquela exception de não estar mapeado.privateAdminsautenticado=adminDao.verificaAdmin(admin.getLogin());@Action(value="login",results={@Result(name="ok",location="/menu.jsp"),@Result(name="invalido",location="/login.jsp")})publicStringlogin(){if(autenticado.getLogin().equals(admin.getLogin())&&autenticado.getSenha().equals(admin.getSenha())){return"ok";}else{return"invalido";}}publicAdminsgetAdmin(){returnadmin;}publicvoidsetAdmin(Adminsadmin){this.admin=admin;}}
publicclassAdminDAO{privatefinalSessionsession;publicAdminDAO(){session=newHibernateUtil().getSession();}publicAdminsverificaAdmin(Stringlogin){Queryquery=session.createQuery("from Admins where login = :pLogin");query.setString("pLogin",login);return(Admins)query.uniqueResult();}}
Galera, tava vendo aqui… será que não precisa por nenhuma annotation no DAO dizendo que o struts2 irá tomar conta dele? algo do tipo?!?
Eduardo_Bregaida
hey buddy faltou mapear a classe admins no XML ou na classe depende de como vc montou a chamada no hibernate ou jpa. A classe Admins esta anotada com @Entity não êh? Então faltou mapea-la apenas
desk
hey buddy faltou mapear a classe admins no XML ou na classe depende de como vc montou a chamada no hibernate ou jpa. A classe Admins esta anotada com @Entity não êh? Então faltou mapea-la apenas
eai bro, tem o entity sim…como assim mapela vc diz? a classe tá assim óh:
@EntitypublicclassAdmins{@Id@GeneratedValueprivateLongid;privateStringlogin;privateStringsenha;// getters and setters}
Eduardo_Bregaida
desk:
Eduardo Bregaida:
desk:
Galera, tava vendo aqui.. será que não precisa por nenhuma annotation no DAO dizendo que o struts2 irá tomar conta dele? algo do tipo?!?
hey buddy faltou mapear a classe admins no XML ou na classe depende de como vc montou a chamada no hibernate ou jpa. A classe Admins esta anotada com @Entity não êh? Então faltou mapea-la apenas
eai bro, tem o entity sim...como assim mapela vc diz? a classe tá assim óh:
@EntitypublicclassAdmins{@Id@GeneratedValueprivateLongid;privateStringlogin;privateStringsenha;// getters and setters}
então não tem um XML do hibernate ou jpa
lá vc mappeia a classe
desk
Po não to usando XML não … tava usando só por anotattion … no caso só teria como com xml?
Eduardo_Bregaida
Não em algum lugar vc tem q ta mapeando essas classes q vao virar Entidades no banco, dá uma pesquisada caso vc nao as tenha no seu projeto
desk
Não em algum lugar vc tem q ta mapeando essas classes q vao virar Entidades no banco, dá uma pesquisada caso vc nao as tenha no seu projeto
Huum… é pq achava que poderia mapear pelas annotations também… no caso tb tenho esses arquivos aqui ’ hibernate.properties, HibernateUtil ’ : Vo da uma pesquisada Brigado!
Galera, eu resolvi deletar todos os arquivos que faziam o login e criar denovo. agora estou conseguindo logar… quando ponho os dados certos loga certinho, agora se eu ponho algo meio parecido não loga… porém se eu ponho algo que nao tem nda a ver ele da exception:
Vamos supor que eu tenho um cara cadastrado como ‘[email removido]’ e senha ‘123456’ … se eu boto isso certinho ele loga e vai pro menu… se eu ponho a senha um pouco diferente como ‘12345’ ou mudo poca coisa no email ele vai para login… porém se eu ponho algo diferente que não tem tipo ‘[email removido]’ ‘123’ ele da essa exception… não sei o porque disso
Galera, eu resolvi deletar todos os arquivos que faziam o login e criar denovo. agora estou conseguindo logar.. quando ponho os dados certos loga certinho, agora se eu ponho algo meio parecido não loga.. porém se eu ponho algo que nao tem nda a ver ele da exception:
Vamos supor que eu tenho um cara cadastrado como '[email removido]' e senha '123456' .. se eu boto isso certinho ele loga e vai pro menu.. se eu ponho a senha um pouco diferente como '12345' ou mudo poca coisa no email ele vai para login.. porém se eu ponho algo diferente que não tem tipo '[email removido]' '123' ele da essa exception.. não sei o porque disso :(