Criando DAO Generico, erro no metodo de listar [RESOLVIDO]
13 respostas
LarissaNepomuceno
Olá Pessoal, boa noite. Já dei uma lida nos tópicos parecido com esse mas não achei uma solução ainda. Tenho um DAO generico, e gostaria de saber como fazer o metodo que lista todos os objetos de uma tabela:
ServicoobjServico=newServico();ServicoDAOobjServicoDAO=newServicoDAO();List<bean.Servico>listaServicos;listaServicos=(List<Servico>)(Servico)objServicoDAO.buscaObjeto(objServico);for(inti=0;i<listaServicos.size();i++){System.out.println("Nome do Servico: "+listaServicos.get(i).getNomeServico()+"\nValor do Servico: "+listaServicos.get(i).getPrecoServico()+"\nId do Servico: "+listaServicos.get(i).getIdServico());}
Porém tenho o seguinte erro:
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: unexpected token: class near line 1, column 6 [FROM class bean.Servico objeto ]
Ola… vou postar aqui pra voce o codigo de uma DAO Generica que eu implementei… o metodo para listar os objetos ficou assim…
publicList<Object>listAllGeneric(ObjectQueryObject){
List<Object>elementsResult=null;Transactiontx=null;//Sessionsession=SessionFactoryUtil.getInstance().getCurrentSession();Sessionsession=getSession();try{
tx=session.beginTransaction();Queryselect=session.createQuery("select p from "+QueryObject.getClass().getName()+" as p");elementsResult=AmostechUtils.castList(QueryObject.getClass(),select.list());for(Iterator<Object>iter=elementsResult.iterator(); iter.hasNext();) {Objectelement=iter.next();logger.debug("{}",element);}
tx.commit();}catch(RuntimeExceptione){
if(tx!=null&&tx.isActive()){
try{
//Secondtrycatchastherollbackcouldfailaswelltx.rollback();}catch(HibernateExceptione1){
logger.debug("Error rolling back transaction");}
//throwagainthefirstexceptionthrowe;}
}
returnelementsResult;}
Qualquer duvida soh perguntar…
A
amostech
acredito que seja object.getClass().getName()
e nao apenas object.getClass() entende? Testa dessa maneira que eu flei pra vc… acho que vai funcionar…
LarissaNepomuceno
OI! Obrigada pela reposta. Não sabia que dava pra fazer isso.
Mas agora estou com o seguinte erro:
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to bean.Servico
at apolo.Main.main(Main.java:45)
Java Result: 1
OI! Obrigada pela reposta. Não sabia que dava pra fazer isso.
Mas agora estou com o seguinte erro:
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to bean.Servico
at apolo.Main.main(Main.java:45)
Java Result: 1
Olá amostech. Funcionou cara! Muito bom mesmo, mas eu não entendi direito como o castList funciona. Isso servirá para qualquer objeto em que eu requiera uma lista?
Fiquei empolgada agora. Muito bom mesmo!
Então, denisbenjamim, seguinte é um objeto Servico, mas tipo, ele não precisa saber disso, basta retorna a lista de objetos que eu enviar…
Priuli vou dar uma lida na solução
Valew pessoal.
LarissaNepomuceno
VALEW GALERA
denisbenjamim
LarissaNepomuceno:
Olá amostech. Funcionou cara! Muito bom mesmo, mas eu não entendi direito como o castList funciona. Isso servirá para qualquer objeto em que eu requiera uma lista?
Fiquei empolgada agora. Muito bom mesmo!
Então, denisbenjamim, seguinte é um objeto Servico, mas tipo, ele não precisa saber disso, basta retorna a lista de objetos que eu enviar…
Priuli vou dar uma lida na solução
Valew pessoal.
Perguntei o tipo, por que no caso do DAO que uso, eu passei a ele uma Classe a qual ele deveria consultar, mas mesmo assim, ele sempre me devolve um List ou seja, devolve Dados do tipo Object, eu simplesmente quando repasso, para a aplicação em outro list, ou arraylist, ou eu especifico nesse novo list, o tipo utilizando <?> ou, quando for passar para a classe responsavel uso um Cast simples, do tipo minha_classe novaclasse = (novaclasse) MeuList.get(idx); .
A
amostech
Entao, o castList funciona assim ele cria uma nova lista auxiliar capaz de receber elementos do tipo do seu objeto, no caso Servico, dai ele vai adicionando a esta nova lista os elementos da lista que voce passou como parametro para a lista auxiliar fazendo o cast individual. Depois ele retorna a lista auxiliar…
Acredito que a solucao do priuli seja mais elegante sim. E inclusive quero dar uma olhada, porem agora estou com o prazo meio apertado para concluir o sistema e nao posso parar para resolver isso. Mas com certeza vou dar uma olhada!
um abraco.
LarissaNepomuceno
Valew pessoal. Isso mesmo.
denisbenjamim
amostech:
Entao, o castList funciona assim ele cria uma nova lista auxiliar capaz de receber elementos do tipo do seu objeto, no caso Servico, dai ele vai adicionando a esta nova lista os elementos da lista que voce passou como parametro para a lista auxiliar fazendo o cast individual. Depois ele retorna a lista auxiliar…
Acredito que a solucao do priuli seja mais elegante sim. E inclusive quero dar uma olhada, porem agora estou com o prazo meio apertado para concluir o sistema e nao posso parar para resolver isso. Mas com certeza vou dar uma olhada!
um abraco.
Bom dia Galera, do guj… bom concordo que ficar fazendo o cast um por um é meio desnecessario, so passar as especificações da classe ao list<?> , ai nao será necessario fazer o cast da forma que eu havia citado , abraço galera.