DI - dao generico

considerando o dao generico :


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 ?

Blz?

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.

Espero ter ajudado.

flw…

Não gostaria de usar o DAOGenerico em casos como esse :

public Usuario existeUnico (Usuario u) { String hql = "select u from Usuario as u where u.login = :login and" + " u.senha = :senha "; Query query = getSession().createQuery(hql); query.setParameter("login", u.getLogin()); query.setParameter("senha", u.getSenha()); return (Usuario) query.uniqueResult(); }

acho que ficaria muito mais interessante usar um dao especifico em casos como esse.

Mas gostaria de ouvir algumas opinioes a respeito…

Se este método estiver no DAO genérico ele vai deixar de ser genérico.

Eu só me pergunto qual a utilidade deste tipo de método… Tipo, só traduzir uma função já resolve o meu problema? =?

Não consegui entender a pergunta …

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

Na documentação do Hibernate tem um exemplo de DAO Generico: https://www.hibernate.org/328.html

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.

Espero que tenha ficado claro

Fico sim ! ^^

so não estou conseguindo acessar o link que me passastes, nem mesmo o site do hibernate.

O site é de lua, toda hora tá com problema, mas jajá volta.