estou implementando a apostila da Caelum fj 21, sendo que essa apostila ensina o struts separado do hibernate e estou tentando juntar os dois em um sistema simpels de login, mas estou com algumas dificuldades.
não estou conseguindo passar o objeto User para o DAO que esta o Hibenate pois só aprendi a passar variáveis primitivas e não objetos, como fazer isso?
sem o hibernate ele ia sem problemas, mas agora ele esa falando que nesse If deve constar um tipo booleno sendo que antes funcionava sem problemas
o que eu faço?
obrigada
Action:
[code]
public class LoginAction {
private User user;
/o problema esta aqui/
if (new UserDAO().procura(user)) {
ActionContext.getContext().getSession().put(“usuarioLogado”, user);
return “ok”;
}
return “invalido”;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}[/code]
DAO:
public User procura(User user) {
return (User) this.session.load(User.class, user);
}
Essa sua DAO está retornando um objeto User e não um retorno booleano.
public User procura(User user) {
// OBS: aqui n seria o ID do usuario a ser passado? user.getiD();
return (User) this.session.load(User.class, user);
}
podemos fazer assim entao:
/*o problema esta aqui*/
/*Se o retorno for diferente de nulo quer dizer que encontrou um usuario. Assim você estará fazendo uma comparacao que tem um retorno booleano (true or false)*/
if ( new UserDAO().procura(user) != null) {
ActionContext.getContext().getSession().put("usuarioLogado", user);
return "ok";
}
Para vc pesquisar o usuário de id 1 gravado na base de dados você devera fazer da seguinte maneira:
// Observe que aqui é chamodo o metodo representando o ID do usuario no bando de dados
User user = (User) this.session.load(User.class, user.getId());
Você tb pode efetuar outro tipo de pesquisa, por exemplo, pesquisar o usuário pelo nome.
Existe varias formas de se pesquisar no hibernate, neste caso irei mostrar com criteria:
public User procuraPeloNome(String nomeUsuario) {
// Criando o criteria para pesquisar User
Criteria criteria = this.getSession().createCriteria(User.class);
// Aqui você fala que a String nomeUsuario deve ser igual a persistida no banco de dados para a coluna usuario
// uniqueResult() = Define que será retornado apenas um resultado para a pesquisa e não uma lista no caso de conter no bando de dados, mais de um usuario com o mesmo nome, oque seria incorreto conter.
return (Usuario) criteria.add(Restrictions.eq("usuario", nomeUsuario)).uniqueResult();
}
Agora voce quer saber como você faz para comparar os objetos.
Então supondo que no seu login vc informou o usuário=Joao e a senha=1234.
//Primeiro vc ira fazer a pesquisa pelo nome
public String login() {
// Instancia DAO
UserDao dao = new UserDAO(session);
// Efetua a pesquisa do usuário pelo nome. No nosso caso Joao
User usuarioPesquisado = dao.procuraPeloNome(user.getUsuario());
// Caso o nome Joao n exista, sera retornado null na pesquisa
if (usuarioPesquisado == null) {
// Nome do usuario não existe
return "false";
// Caso usuário exista. Verifica se a senha está correta. NO caso 1234
} else if (usuarioPesquisado .getSenha().equals(user.getSenha())) {
// Senha correta
return true;
// Senha incorreta
} else {
return "false";
}
}
Enfim, não fazemos comparação do objeto e sim pelos atributos que ele contem.
N sei se fico bem claro hehe, mas qualquer coisa se conseguir ajudar ajudarei.
Olá rdmardegam, obrigada pela resposta, olhei o que você me passou e implementei de outra forma, mas seguindo sua orientação, acho que deu certo, só estou com um problema, como eu comparo o resultado da criteria do hibernate, ele é um objeto, um array? o que é isso? segue o exemplo:
Esse if( c.list() != null) não esta comparando direto, ele retorna vazio, mas não permite que eu compare valor em branco, o que eu faço?
Obrigada
public boolean procura2(User user) {
String name = user.getName();
String password = user.getPassword();
Criteria c = this.session.createCriteria(User.class);
c.add(Restrictions.eq("name", name));
c.add(Restrictions.eq("password", password));
if( c.list() != null){
System.out.println(" foi"+c.list());
return true;
}else{
System.out.println(" não foi"+c.list());
return false;
}