public class Dao<T> {
private Session session;
private final Class classe;
public Dao(Session session, Class classe){
this.session = session;
this.classe = classe;
}
public void adiciona(T u){
this.session.save(u);
}
public void remove(T u){
this.session.delete(u);
}
public void atualiza(T u){
this.session.update(u);
}
public List<T> pesquisaTodos(){
return this.session.createCriteria(this.classe).list();
}
public T pesquisa(Long id){
return (T) session.load(this.classe, id);
}
protected Session getSession() {
return session;
}
}
qual seria a melhor solução no seguinte cenario :
Por exemplo, um select para verificação de usuarios(Login), ele não pode ser implementado na minha classe dao, uma vez que a mesma é generica. Então como eu deveria implementar tal funcionalidade ? Criando uma classe UsuarioDao e extendendo a classe Dao ?
Vc pode sim criar uma classe usuário DAO, herdando de DAOGenérico. Aí vc pode criar um método específico para puxar os dados necessários para a validação.
Não endenti qual a razão pela qual vc não vai usar o DAOGenérico, já que vc pode recuperar os dados do usuário por ela também. De qualquer forma já usei DAOs herdados de DAOGenérico para algumas coisas específicas.
Basicamente, você pode criar, dentro do seu DAO genérico, métodos que recebam HQL, NamedQuery ou até mesmo Criterion.
Assim, na sua camada anterior, você passa o HQL, NamedQuery ou Criteria para verificar o Login
Igual já disseram, se você extender para UsuarioDAO por exemplo, você está perdendo a funcionalidade do DAO Generico. Você deve extender para outro DAO, apenas qdo voce tem uma funcionalidade bemmmmmm específica.