GenericDAO

10 respostas
J

Pessoal,

Estou tentando fazer uma classe generica para meus DAOS, mas na hora de implementar dá erro, alguem pode me ajudar:

Minha classe generica ficou assim(sem erros):

GenericDAO.java
package br.com.catalogo.dao;

import java.util.List;
import org.hibernate.Session;

public class GenericDAO<T> {

    private Class classePersistencia;
    protected Session sessao;

    public GenericDAO(Session sessao, Class classePersistencia) {
        this.sessao = sessao;
        this.classePersistencia = classePersistencia;
    }

    public void Salvar(T t) {
        sessao.save(t);
    }

    public void Apagar(T t) {
	sessao.delete(t);
    }

    public void Atualizar(T t) {
        sessao.merge(t);
    }

    @SuppressWarnings("unchecked")
    public T Carregar(int id) {
        return (T) sessao.load(classePersistencia, id);
    }

    @SuppressWarnings("unchecked")
    public List Listar() {
    	return sessao.createCriteria(classePersistencia).list();
    }
}

Implementando:

UsuarioDAO.java
package br.com.catalogo.dao;

import br.com.catalogo.modelo.Usuario;

public class UsuarioDAO extends GenericDAO<Usuario> {

}

Nem continuei a fazer minha classe UsuarioDAO pois ja esta dando erro na declaração da mesma, o netbeans da erro na primeira linha, dizendo que o simbolonao foi achado.
O que estou fazendo de errado na usuarioDAO?

10 Respostas

Alexandro.Almeida

Qual exatamente é a msg de erro?

De qq forma, olhe isso: http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/

Scoobydoo

hmm… coloque ela como @Resource

sammers21

Na hora que você tenta fazer a herança use Usuario.class em vez de somente Usuario

J

Coloquei @Resource, mas não adiantou
Coloquei tambem Usuario.class, ao inves de apenas Usuario, nada também.

O erro é esse:

Cannot find symbol.

symbol: constructor GenericDAO()

location: class br.com.catalogo.dao.GenericDAO<br.com.catalogo.Usuario>
Scoobydoo

Botasse @Resource nos 2???
Tenta @Components …num lembro mais

¬¬
Coloque sua outra classe… que chama o Dao
constructor DenericDAO() <Deneric ???

J

Colocar Resource tanto na GenericDao quanto na clase Usuario, é isso? Qual import que dou: javax.anotation, org.apache.taglibs ou sun.security.util?

Scoobydoo

javax

J

Funcionou.

Não entendi porque o netbeans estava deixando tudo grifado de vermelho.
Ficou assim:

package br.com.catalogo.dao;

import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Session;


@Resource
public class GenericDAO<T> {

    private Class classePersistencia;
    protected Session sessao;

    public GenericDAO(Session sessao, Class classePersistencia) {
        this.sessao = sessao;
        this.classePersistencia = classePersistencia;
    }

   ...
}
UsuarioDAO
package br.com.catalogo.dao;

import br.com.catalogo.modelo.Usuario;
import org.hibernate.Session;
import javax.annotation.Resource;

@Resource
public class UsuarioDAO extends GenericDAO<Usuario> {

    public UsuarioDAO(Session sessao, Class<?> classe) {
        super(sessao, classe);

    }
    ...
}

Muito obrigado pelas dicas e pela ajuda, se tiverem alguma coisa a acresectar, agradeço.

Abraços

Alexandro.Almeida

Scoobydoo:
Botasse @Resource nos 2???
Tenta @Components …num lembro mais

¬¬
Coloque sua outra classe… que chama o Dao

constructor DenericDAO() <Deneric ???

Parai, achei que você não tinha implementado o construtor, mas vc implementou .
Mas tem o seguinte, o erro de digitação esta no código ou só na hora de gititar no Guj? Pq a msg de erro refere-se a uma classe DenericDAO e não GenericDAO como deveria.

J

Não tinha visto, foi erro de digitação na hora de postar a resposta mesmo, é Generic mesmo.

Criado 1 de fevereiro de 2010
Ultima resposta 1 de fev. de 2010
Respostas 10
Participantes 4