Problemas com NamedQuery

2 respostas
B

Minha NamedQuery é

@NamedQuery(name = "ContasPlano.findByConta", query = "SELECT c FROM ContasPlano c WHERE c.contas_idcontas = :conta")

O Problema é que c.contas_idcontas é uma PK de uma tabela chamada Contas, onde há uma FK com a tabela ContasPlano.

Ou seja, a tabela Contas tem uma relação 1:n com a tabela ContasPlano.

No BD, acessando a tabela ContasPlano, a variável contas_idcontas é um INT.

Quando executo o código,

public List<ContasPlano> buscaPorConta(Contas conta){
        logger.info("Pesquisa por conta: "+ conta);
        
        Query query = em.createNamedQuery("ContasPlano.findByConta");
        query.setParameter("conta", conta.getIdcontas());
        List<ContasPlano> contas = query.getResultList();
        
        return contas;      
        
    }

Tenho o seguinte resultado,

org.hibernate.QueryException: could not resolve property: contas_idcontas of: siag.entities.ContasPlano [SELECT c FROM siag.entities.ContasPlano c WHERE c.contas_idcontas = :conta]
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: SIAGPU] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at siag.implementation.ContasPlanoImp.salvar(ContasPlanoImp.java:28	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
)
	at siag.tests.Testes.main(	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
Testes.java:27)
	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1818)
Caused by: org.hibernate.HibernateException: Errors in named queries: ContasPlano.findByConta
	at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:313)
	at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:494)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:534)
	at org.hibernate.hql.internal.ast.tree.DotNode.getDataType(DotNode.java:598)
	at org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:266)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
	at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:213)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:118)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	... 6 more
	at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:114)
	at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:881)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1258)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4270)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3748)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1935)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:794)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:595)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
	at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:1132)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:525)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at siag.implementation.ContasPlanoImp.salvar(ContasPlanoImp.java:28)
	at siag.tests.Testes.main(Testes.java:27)
Java Result: 1

2 Respostas

Hebert_Coelho

Como você mapeou esse cara na sua classe? c.contas_idcontas

Como está na tabela ñ importa, sua JPQL (HQL) tem que refletir a sua classe e não a tabela.

B

Exatamente, obrigado, o problema estava na NamedQuery, e no mapeamento a variável tinha outro nome.

Valeu.

Criado 31 de julho de 2012
Ultima resposta 31 de jul. de 2012
Respostas 2
Participantes 2