Criando DAO Generico, erro no metodo de listar [RESOLVIDO]
13 respostas
L
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…
L
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.
L
LarissaNepomuceno
VALEW GALERA
D
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.
L
LarissaNepomuceno
Valew pessoal. Isso mesmo.
D
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.