DI - dao generico

8 respostas
G

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 ?

8 Respostas

T

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…

G

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…

B

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

C

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

G

Não consegui entender a pergunta …

Jair_Rillo_Junior

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

G

Fico sim ! ^^

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

B

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

Criado 30 de julho de 2009
Ultima resposta 30 de jul. de 2009
Respostas 8
Participantes 5