Oi GUJ,
pessoal, sei que java não trabalha com ponteiros como em C++ (adoro C++,rs).
Estou com um problema que não consigo entender porque volta null no objeto ‘usuario’:
//Chamando o método 'login'Usuariousuario=newUsuario();BancoDadosbd=newBancoDados();Stringstatus=bd.login(email,senha,usuario);
//Método loginpublicStringlogin(Stringemail,Stringsenha,Usuariousuario){Stringstatus="login_correto";Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction();try{Queryquery=session.createQuery("from Usuario where email = '"+email+"' and senha = '"+senha+"'");if(query.list().size()>0){usuario=(Usuario)query.list().get(0);System.out.println("BANCO DADOS - LOGIN");usuario.exibir();}else{status="login_incorreto";}}catch(HibernateExceptionhe){System.out.println("Exceção em Banco de dados - login:"+he.getCause().getLocalizedMessage());status=he.getCause().getLocalizedMessage();}returnstatus;}
Então quando ele termina de executar o método login, o objeto usuario que eu referenciei volta null…
O que esta errado ?
porque a posição 0 da lista retorna null, linha 10. Isso se deve ao fato de sua consulta nao retornar nenhum resultado.
Agora algumas consideraçoes do codigo:
um metodo que recebe login, senha e usuario dps retorna uma string nao me parece muito bem elaborado.
Da a impressao que vc depende da string de retorno para fazer o fluxo da aplicação, tecnica conhecida como Orientacao a Strings…
envie login e senha e retorne um usuario ou um boolean indicando se o usuario foi logado com sucesso.
tambem nao concatene strings para formar queries como na linha 8.
abrassss
denislima
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Valter_Henrique
denislima:
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Então cara, eu testei e ele retorna sim, tanto que fiz um print logo abaixo e ele mostra, mas quando ele sai do método, o objeto usuario esta com todos os valores setados como ‘null’.
EDIT: Acho que java tem passagem por referência sim cara.
kenneth
Fala brow,
Isso aqui:
query.list().get(0)
Esta retornando algum registro?
Valter_Henrique
renanreismartins:
ola, respondendo sua questao:
porque a posição 0 da lista retorna null, linha 10. Isso se deve ao fato de sua consulta nao retornar nenhum resultado.
Agora algumas consideraçoes do codigo:
um metodo que recebe login, senha e usuario dps retorna uma string nao me parece muito bem elaborado.
Da a impressao que vc depende da string de retorno para fazer o fluxo da aplicação, tecnica conhecida como Orientacao a Strings…
envie login e senha e retorne um usuario ou um boolean indicando se o usuario foi logado com sucesso.
tambem nao concatene strings para formar queries como na linha 8.
abrassss
Então Renan,
eu estou retornando uma string para poder tratar melhor as exceções que podem ser lançadas.
Na verdade eu queria passar o objeto usuario e no mesmo método retornar a string com o status da operação entendeu ?
E sobre não concatenar string na query eu não entendi, por que não se pode concatenar ?
Abraços.
Valter_Henrique
kenneth:
Fala brow,
Isso aqui:
query.list().get(0)
Esta retornando algum registro?
Tah sim brother.
renanreismartins
oi Valter, entendi sim… ainda acho que controlar o fluxo por strings pode ser ruim, lance as exceçoes.
Nao é legal concatenar devido aos perigos de um SQL Injection. Bem como existem outras maneiras de deixar seu codigo muito mais elegante.
Queryquery=session.createQuery("from Usuario where email = :email and senha = senha");query.setParameter("email",email);
alem de poder usar Criteria.
Sugiro que vc faça um debug do metodo inteiro, acompanhe seu objeto usuario e veja em qual linha ele se torna nulo
grande abrasss
denislima
Valter Henrique:
denislima:
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Então cara, eu testei e ele retorna sim, tanto que fiz um print logo abaixo e ele mostra, mas quando ele sai do método, o objeto usuario esta com todos os valores setados como ‘null’.
EDIT: Acho que java tem passagem por referência sim cara.
EM JAVA TODA PASSAGEM EH POR VALOR!!!, NAO EXISTE PASSAGEM POR REFERENCIA EM JAVA!
oi Valter, entendi sim… ainda acho que controlar o fluxo por strings pode ser ruim, lance as exceçoes.
Nao é legal concatenar devido aos perigos de um SQL Injection. Bem como existem outras maneiras de deixar seu codigo muito mais elegante.
Queryquery=session.createQuery("from Usuario where email = :email and senha = senha");query.setParameter("email",email);
alem de poder usar Criteria.
Sugiro que vc faça um debug do metodo inteiro, acompanhe seu objeto usuario e veja em qual linha ele se torna nulo
grande abrasss
Entendi Renan (sobre concaternar a string na query).
Então cara, ele dentro do try não é nulo, mas quando ele sai do método ele se torna nulo.
Valter_Henrique
denislima:
Valter Henrique:
denislima:
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Então cara, eu testei e ele retorna sim, tanto que fiz um print logo abaixo e ele mostra, mas quando ele sai do método, o objeto usuario esta com todos os valores setados como ‘null’.
EDIT: Acho que java tem passagem por referência sim cara.
EM JAVA TODA PASSAGEM EH POR VALOR!!!, NAO EXISTE PASSAGEM POR REFERENCIA EM JAVA!
(tem mesmo necessidade dessa caixa alta cara ?)
denislima
Valter Henrique:
denislima:
Valter Henrique:
denislima:
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Então cara, eu testei e ele retorna sim, tanto que fiz um print logo abaixo e ele mostra, mas quando ele sai do método, o objeto usuario esta com todos os valores setados como ‘null’.
EDIT: Acho que java tem passagem por referência sim cara.
EM JAVA TODA PASSAGEM EH POR VALOR!!!, NAO EXISTE PASSAGEM POR REFERENCIA EM JAVA!
(tem mesmo necessidade dessa caixa alta cara ?)
hehehe… desculpa… nao interprete mal…coloquei mais para destacar a frase msm… nao falei “gritando” nao…
verifique se vc nao passa nulo pra ele dentro do metodo exibir()…
sobre as strings e exceçoes, creio que vc encontrará uma boa explicação no blog da caelum ou apostila do fj11
abrassss
Valter_Henrique
denislima:
Valter Henrique:
denislima:
Valter Henrique:
denislima:
Em Java nao existe passagem por referencia. Em Java toda passagem é por VALOR.
Voce debugou essa parte do codigo? Verificou se sua consulta esta retornando algum registro?
usuario=(Usuario)query.list().get(0);
Pode ser que sua consulta nao retorne nada e o usuario entao aponte para null.
Verifica ae…
[]'s
Então cara, eu testei e ele retorna sim, tanto que fiz um print logo abaixo e ele mostra, mas quando ele sai do método, o objeto usuario esta com todos os valores setados como ‘null’.
EDIT: Acho que java tem passagem por referência sim cara.
EM JAVA TODA PASSAGEM EH POR VALOR!!!, NAO EXISTE PASSAGEM POR REFERENCIA EM JAVA!
(tem mesmo necessidade dessa caixa alta cara ?)
hehehe… desculpa… nao interprete mal…coloquei mais para destacar a frase msm… nao falei “gritando” nao…
verifique se vc nao passa nulo pra ele dentro do metodo exibir()…
sobre as strings e exceçoes, creio que vc encontrará uma boa explicação no blog da caelum ou apostila do fj11
abrassss
Valeu Renan, já baixei a apostila,rs.
Valter_Henrique
Galera, seguindo a orientações de todos, resolvi e ficou assim:
BancoDadosbd=newBancoDados();Usuariousuario=bd.login(email,senha);if(usuario==null){status="login_incorreto";}//esse método trata a exceçõesretornarStatus(request,response,status,usuario);
//Método loginpublicUsuariologin(Stringemail,Stringsenha){Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction();Usuariousuario=null;try{Queryquery=session.createQuery("from Usuario where email = :email and senha = :senha");query.setParameter("email",email);query.setParameter("senha",senha);if(query.list().size()>0){usuario=(Usuario)query.list().get(0);}}catch(HibernateExceptionhe){System.out.println("Exceção em Banco de dados - login:"+he.getCause().getLocalizedMessage());}returnusuario;}
Valeu galera.
E ai Renan, ficou elegante agora ?rs (brincadeira,rs)
Abraços.
renanreismartins
sim… melhor… agora falta soh fechar a transacao e a session rsrs
abrasssss
Valter_Henrique
renanreismartins:
sim… melhor… agora falta soh fechar a transacao e a session rsrs
abrasssss
Renan, sou novo no Hibernate velho, pelo que vi faltou um :
session.clear();session.close();
Eh isso ? (para fechar a transação e a sessão corretamente ? )
renanreismartins
n esquenta é assim mesmo… vc deve fazer algo como: