Ola Pessoal… estou com uma duvida para fazer um metodo que lista todos os elementos de uma tabela do meu banco, mas essa lista tem que ser generica para poder listar todas as minhas classes( no caso o meu metodo listaTudo())… eu estou usando o Hibernate… e tentei fazer isso aqui embaixo mas nao ta dando certo… se alguem puder dar uma luz eu agradeçooo…
Exception in thread "main" java.lang.ClassCastException: br.com.jp.hibernate.Produto cannot be cast to java.lang.Class
at br.com.jp.hibernate.GenericoHibernateDao.<init>(GenericoHibernateDao.java:18)
at br.com.jp.hibernate.TestaDaoGenerico.main(TestaDaoGenerico.java:16)
quando eu faço isso o eclipse sugere que eu crie uma classe t ou uma interface t
A
AbelBueno
Tenta:
this.classePersistente = t.getClass() ;
jximenes
Muito Obrigado amigo… deu certo com o getClass.
A
AbelBueno
Uma dúvida sobre o seu código. Para que serve isso:
private T t;
Você não usa esse t em nenhum outro lugar da classe.
Para salvar, remover e atualizar você passa um novo t como parâmetro.
Para listar, não é necessário.
Você pode excluir esse atributo e alterar seu construtor para:
Pode inclusive, declarar o atributo classePersistente com o tipo genérico:
private Class<T> classePersistente;
Enfim, são apenas algumas sugestões.
M
michelorth_92
veja se isso ajuda
packagebr.com.projeto.dao;importjava.io.Serializable;importjava.util.Date;importjava.util.List;importjavax.persistence.OrderBy;importjavax.persistence.criteria.Order;importorg.hibernate.Criteria;importorg.hibernate.Query;importorg.hibernate.Session;importbr.com.projeto.beans.ItensDeServico;importbr.com.projeto.beans.OrdemDeServico;importbr.com.projeto.util.HibernateUtil;publicclassHibernateDao<T>implementsInterfaceDao<T>{privateClass<T>classe;publicHibernateDao(Class<T>classe){super();this.classe=classe;}@Overridepublicvoidsalvar(Tbean){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();session.save(bean);session.getTransaction().commit();}@Overridepublicvoiddeletar(Tbean){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();session.delete(bean);session.getTransaction().commit();}@Overridepublicvoidatualizar(Tbean){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();session.update(bean);session.getTransaction().commit();}@OverridepublicList<T>getBeans(){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();List<T>beans=(List<T>)session.createCriteria(classe).list();session.getTransaction().commit();returnbeans;}@OverridepublicTgetBean(Serializableid){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();Tbean=(T)session.get(classe,id);session.getTransaction().commit();returnbean;}publicList<T>getBeansItens(Serializableid){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();List<T>beans=(List<T>)session.createQuery("from ItensDeServico where id_ordemDeServico="+id).list();session.getTransaction().commit();returnbeans;}publicvoiddeletarVarios(List<ItensDeServico>itensDeServico){Sessionsession=HibernateUtil.getSf().getCurrentSession();ItensDeServicoiten=newItensDeServico();for(inti=0;i<itensDeServico.size();++i){iten=itensDeServico.get(i);session.beginTransaction();session.delete(iten);session.getTransaction().commit();}}publicList<T>getBeansData(Stringdata3,Stringdata4){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();List<T>beans=(List<T>)session.createQuery("FROM OrdemDeServico WHERE dataFechamento BETWEEN '"+data3+"' AND '"+data4+"'").list();session.getTransaction().commit();returnbeans;}publicList<T>getBeansOrdem(){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();Criteriacriteria=session.createCriteria(classe);criteria.addOrder(org.hibernate.criterion.Order.desc("idOrdemDeServico"));List<T>beans=criteria.list();session.getTransaction().commit();returnbeans;}}
jximenes
michelorth_92:
veja se isso ajuda
packagebr.com.projeto.dao;importjava.io.Serializable;importjava.util.Date;importjava.util.List;importjavax.persistence.OrderBy;importjavax.persistence.criteria.Order;importorg.hibernate.Criteria;importorg.hibernate.Query;importorg.hibernate.Session;importbr.com.projeto.beans.ItensDeServico;importbr.com.projeto.beans.OrdemDeServico;importbr.com.projeto.util.HibernateUtil;publicclassHibernateDao<T>implementsInterfaceDao<T>{privateClass<T>classe;publicHibernateDao(Class<T>classe){super();this.classe=classe;}@Overridepublicvoidsalvar(Tbean){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();session.save(bean);session.getTransaction().commit();}@Overridepublicvoiddeletar(Tbean){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();session.delete(bean);session.getTransaction().commit();}@Overridepublicvoidatualizar(Tbean){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();session.update(bean);session.getTransaction().commit();}@OverridepublicList<T>getBeans(){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();List<T>beans=(List<T>)session.createCriteria(classe).list();session.getTransaction().commit();returnbeans;}@OverridepublicTgetBean(Serializableid){Sessionsession=HibernateUtil.getSf().openSession();session.beginTransaction();Tbean=(T)session.get(classe,id);session.getTransaction().commit();returnbean;}publicList<T>getBeansItens(Serializableid){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();List<T>beans=(List<T>)session.createQuery("from ItensDeServico where id_ordemDeServico="+id).list();session.getTransaction().commit();returnbeans;}publicvoiddeletarVarios(List<ItensDeServico>itensDeServico){Sessionsession=HibernateUtil.getSf().getCurrentSession();ItensDeServicoiten=newItensDeServico();for(inti=0;i<itensDeServico.size();++i){iten=itensDeServico.get(i);session.beginTransaction();session.delete(iten);session.getTransaction().commit();}}publicList<T>getBeansData(Stringdata3,Stringdata4){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();List<T>beans=(List<T>)session.createQuery("FROM OrdemDeServico WHERE dataFechamento BETWEEN '"+data3+"' AND '"+data4+"'").list();session.getTransaction().commit();returnbeans;}publicList<T>getBeansOrdem(){Sessionsession=HibernateUtil.getSf().getCurrentSession();session.beginTransaction();Criteriacriteria=session.createCriteria(classe);criteria.addOrder(org.hibernate.criterion.Order.desc("idOrdemDeServico"));List<T>beans=criteria.list();session.getTransaction().commit();returnbeans;}}
Neste caso vc esta abrindo a session em cada metodo, mas e pra fechar a session... isso nao pode causar um problema depois?
jximenes
AbelBueno:
Uma dúvida sobre o seu código. Para que serve isso:
private T t;
Você não usa esse t em nenhum outro lugar da classe.
Para salvar, remover e atualizar você passa um novo t como parâmetro.
Para listar, não é necessário.
Você pode excluir esse atributo e alterar seu construtor para:
Pode inclusive, declarar o atributo classePersistente com o tipo genérico:
private Class<T> classePersistente;
Enfim, são apenas algumas sugestões.
é realmente o meu “t” nao servia pra nada…hehehe… falha de iniciante…hauhauahu… sugestao aceita… ja ate alterei o meu codigo…abração… e muito obrigado pela ajuda
M
michelorth_92
quando eu dou commit(); ele fecha a sesssão
jximenes
a ta entendi… eu nao sabia dessa … muito obrigado pelas dicas… ja to usando o seu post como ideia para criar os meus metodos…hehe