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.
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.
[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?
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)
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);
}
}
[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.