Sistema de Login com hibernate e struts 2 com problemas

Olá,

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;

@Action(value="login", results= {
@Result(name="ok", location="/menu.jsp"),
@Result(name="invalido", location="/login.jsp")
})
public String login() {

/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";  
    }  

N sei se fico bem claro, mas espero que ajude.

Olá rdmardegam , ajudou sim, e obrigada, era isso mesmo.

ainda fiquei com duvidas relacioandas a isso, uma delas é:
como posso comparara um objeto no hibernate ?

public String login() {
	if (new UserDAO(session).procura(user)) {
	ActionContext.getContext().getSession().put("usuarioLogado", user);
	return "ok";
	}

DAO:
O load não funciona

	public boolean procura(User user) {
	//return (User) this.session.load(User.class, user);
	return true;
	}

Natasha.

Entao o metodo load espera que seja passado o id do objeto persistido na base de dados.

Supondo que seu objeto User tenha os seguintes atributos (OBS: N SEI QUAIS SAO, ESTOU SUPONDO) :

private long id;
private String usuario;
private String senha;

gets...
sets...

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;
		}

Como posso verificar se o resultado de uma Criteria retornou vazia?
se eu colcoar c.list() != " " ele não permite informando que esta errada

atualmente esta assim:

c.list() != null 

mas se o resultado volta vazio ele passa.

Obrigada