[Hibernate]Erro ao "lista" dados do Banco

6 respostas
LucasBrum

Galera estou fazendo um CRUD utilizando o Struts2 e também o Hibernate, o mesmo já está salvando as informações na base de dados, mas ao lista o que foi cadastrado está dando o seguinte erro:

Ao debugar, estou vendo que a linda discs = (List)session.createSQLQuery("from disc").list(); está vindo "Null" ocorrendo o seguinte erro:

org.hibernate.exception.SQLGrammarException: could not execute query at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.loader.Loader.doList(Loader.java:2231) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) at org.hibernate.loader.Loader.list(Loader.java:2120) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175) at brum.mybec.controller.DiscController.list(DiscController.java:43) at brum.mybec.view.DiscAction.add(DiscAction.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) O método em que isso ocorre é:
//Metodo responsavel por listar os discos cadastrados na base de dados	
	public List<Disc> list() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<Disc> discs = null;
		try {
			
			discs = (List<Disc>)session.createSQLQuery("from disc").list();
			
			//discs = (List<Disc>)session.createQuery("select * from disc").list();				
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return discs;

Pesquisei em outros lugares, mas nao consegui resolver esse problema.

Podem me ajudar?

6 Respostas

GusMcCart
discs = (List<Disc>)session.createQuery("from Disc").list();

Tenta isso.
Você está tentando executar uma HQL dentro do método que executa uma SQL padrão…

GusMcCart

Outra coisa também…
Tente deixar seu DAO o mais genérico possível, acredite, isso ajuda d+.
Já citei esse link em outro post, mas dá uma olhada:
http://www.guj.com.br/java/276957-duvida-com-melhorias-dao-generic-com-hibernate

E também, quando for criar uma query pra listar todos de determinada classe por exemplo, creio que seja melhor assim:

public List findAll(Class classe) throws Exception {
        sessao = null;
        List lista;
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            Criteria criteria = sessao.createCriteria(classe);
            lista = criteria.list();
        } catch (Exception e) {
            throw e;
        } finally {
            sessao.close();
        }
        return lista;
    }

Você passa o .class que quiser de retorno, no seu caso no parâmetro poderia ser:

Lista<Disc> discos = dao.list(Disc.class);
LucasBrum

O erro agora mudou está dando o seguinte:

org.hibernate.hql.ast.QuerySyntaxException: disc is not mapped [from disc]

at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)

at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)

at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)

at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:277)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)

at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)

at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)

at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)

at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)

at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)

at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)

at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:616)

at

Não é estranho dizer que minha classe nao está mapeada sendo que eu consigo salvar?

GusMcCart

Tentou fazer pelo .class? Não utilizei muita HQL ainda… mas até onde imagino a HQL é case sensitive… então tenta usar com D maiusculo no “from Disc”.

ErickRAR

Tente com

("from pacote.Disc").list();
LucasBrum

Tentei e nada.
e a query está certa, eu busco direto no banco e consigo com o select * from disc;

Criado 5 de julho de 2012
Ultima resposta 5 de jul. de 2012
Respostas 6
Participantes 3