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.
jason_bourne
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.
cassio
Acabei de dizer que isso não é responsabilidade do DAO…
Mas já que insiste, poderia ter algo assim (solução quick-and-dirty)
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());
}
Não é do DAO? é de quem então? (desculpe perguntar, mas é q sou novo no hibernate)
cassio
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:
Cada objeto deve ter sua responsabilidade bem definida. A responsabilidade de um DAO não é processar os dados, apenas pesquisar, persistir ou apagar, etc.
jason_bourne
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?
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…
jason_bourne
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…
E como vou consultar? isso q não entendi.
cassio
eduacsp:
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…
E como vou consultar? isso q não entendi.
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…
jason_bourne
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)
cassio
Amigo,
Se você quiser pesquisar um Funcionario a partir de seu login, basta criar no seu DAO um metodo mais ou menos assim:
publicFuncionariopesquisaPorLogin(Stringlogin){
returnsession.createQuery("from Funcionario where login = :login").setString("login",login).uniqueResult();
}
jason_bourne
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:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
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.