Qual método que uso no hibernate para autenticar usuário?

Pessoal,

Tenho esse código abaixo e qual método que uso para autenticar usuário no hibernate?

public class FuncionarioDAO {

	private Session session;
	public FuncionarioDAO (Session session) {
		this.session = session;
	}
	public void salva (Funcionario f) {
		this.session.save(f);
	}
	public void remove (Funcionario f) {
		this.session.delete(f);
	}
	public Funcionario procura (Long id) {
		return (Funcionario) this.session.load(Funcionario.class, id);
	}
	public void atualiza (Funcionario f) {
		this.session.update(f);
	}
	

}

[quote=eduacsp]Pessoal,

Tenho esse código abaixo e qual método que uso para autenticar usuário no hibernate?

[code]
public class FuncionarioDAO {

private Session session;
public FuncionarioDAO (Session session) {
	this.session = session;
}
public void salva (Funcionario f) {
	this.session.save(f);
}
public void remove (Funcionario f) {
	this.session.delete(f);
}
public Funcionario procura (Long id) {
	return (Funcionario) this.session.load(Funcionario.class, id);
}
public void atualiza (Funcionario f) {
	this.session.update(f);
}

}

[/code][/quote]

Autenticar o usuário foge da responsabilidade de um DAO. O DAO deve apenas te retornar um objeto da classe Usuario a partir de algum dado único, como um id, um endereço de email, etc. O cliente do DAO é que deve realizar a autenticação do usuário. Para isso essa classe poderia verificar a igualdade entre as senhas do objeto e a informada ou até mesmo pode existir um método boolean autentica(String pw) na classe Usuario.

Sim, mas o que eu quero nessa classe FuncionarioDAO é justamente criar um método que verifique no banco se bate o login e senha e retornar um boolean.

Acabei de dizer que isso não é responsabilidade do DAO…
Mas já que insiste, poderia ter algo assim (solução quick-and-dirty)

public boolean autenticaUsuario(long id, String pw) {
   Funcionario f = procura(id);
   return pw.equals(f.getPassword());
}

Acabei de dizer que isso não é responsabilidade do DAO…
Mas já que insiste, poderia ter algo assim (solução quick-and-dirty)

public boolean autenticaUsuario(long id, String pw) { Funcionario f = procura(id); return pw.equals(f.getPassword()); } [/quote]

Não é do DAO? é de quem então? (desculpe perguntar, mas é q sou novo no hibernate)

Isso não tem haver com o Hibernate, mas sim com uma boa separação entre as responsabilidades das classes que compõe seu programa. Mesmo que a persistência fosse feita com JDBC, arquivos XML ou até mesmo texto plano, a responsabilidade não seria do DAO que acessa estes dados persistidos.
Por exemplo, se você tiver uma classe “manager”, que gerencia algumas operações sobre seus objetos Funcionario, esta classe poderia por exemplo conter código assim:

public class FuncionarioManager {
   private FuncionarioDAO funcionarioDAO = ... //pegue seu DAO de algum jeito...

   //...

   public boolean autentica(String pw, long id) {
      Funcionario f = funcionarioDAO.procura(id);
      return (f != null && pw.equals(f.getPassword());
   }
}

Cada objeto deve ter sua responsabilidade bem definida. A responsabilidade de um DAO não é processar os dados, apenas pesquisar, persistir ou apagar, etc.

Ha entendi, então eu teria q usar um desses métodos do DAO para persistir os dados do select, correto? mas qual deles faz isso?

Persistir? Select?
Persistir é equivalente a salvar
Select é pesquisar…
Persistir os dados da pesquisa? Não entendi…

Mas para autenticar um usuário, seguindo a nossa linha de raciocínio até aqui, você não precisa gravar nada no banco, apenas consultar…

[quote=cassio]Persistir? Select?
Persistir é equivalente a salvar
Select é pesquisar…
Persistir os dados da pesquisa? Não entendi…

Mas para autenticar um usuário, seguindo a nossa linha de raciocínio até aqui, você não precisa gravar nada no banco, apenas consultar…[/quote]

E como vou consultar? isso q não entendi.

[quote=eduacsp][quote=cassio]Persistir? Select?
Persistir é equivalente a salvar
Select é pesquisar…
Persistir os dados da pesquisa? Não entendi…

Mas para autenticar um usuário, seguindo a nossa linha de raciocínio até aqui, você não precisa gravar nada no banco, apenas consultar…[/quote]

E como vou consultar? isso q não entendi.[/quote]

Ué… pesquisa com seu método pesquisar(long id), no seu DAO… é pra isso que esse método serve, não? :slight_smile:
Depois que você tiver o objeto Funcionario a partir do id, você compara as senhas…

Na verdade esse método procura é apenas um método exemplo de procura por ID. Mas no caso de validação de login/senha eu precisaria entrar com o login e a senha (eu acho)

Amigo,

Se você quiser pesquisar um Funcionario a partir de seu login, basta criar no seu DAO um metodo mais ou menos assim:

public Funcionario pesquisaPorLogin(String login) {
   return session.createQuery("from Funcionario where login = :login").setString("login", login).uniqueResult();
}

Estou tentando mas acho q a entidade não foi criada pq aparece essa msg : Unknown entity

Quando tento executar esse código não aparece nada de errado:

public class GeraTabelas {

	public static void main(String[] args) {

		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Usuario.class);
		new SchemaExport(cfg).create(true, true);

	}

}

Só aparece isso:

[quote=eduacsp]Estou tentando mas acho q a entidade não foi criada pq aparece essa msg : Unknown entity

Quando tento executar esse código não aparece nada de errado:

public class GeraTabelas {

	public static void main(String[] args) {

		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Usuario.class);
		new SchemaExport(cfg).create(true, true);

	}

}

Só aparece isso:

[quote]
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

[/quote][/quote]

Amigo,

O seu DAO chama-se FuncionarioDAO, pelo que você colocou nos seus exemplos anteriores. Se você está querendo pesquisar objetos da classe Usuario, a menos que Funcionario seja derivado de Usuario e esteja efetivamente anotado com @Entity, a query que te passei não vai funcionar mesmo. Neste caso, troque para “from Usuario” onde está “from Funcionario”.

Sugiro que você dê uma estudada melhor no Hibernate.

"