Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Dúvida no Ex. 7 da Aula 5 - Pesquisas orientado a objetos com JPQL

O meu exercício está aparecendo na console o erro. O id 1 existe no banco.

Alguém pode me ajudar?

CONSOLE:

abr 20, 2016 12:20:02 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: JPA_UTIL
    ...]
abr 20, 2016 12:20:02 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.1.0.Final}
abr 20, 2016 12:20:02 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
abr 20, 2016 12:20:02 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
abr 20, 2016 12:20:02 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
abr 20, 2016 12:20:02 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
abr 20, 2016 12:20:02 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/financas]
abr 20, 2016 12:20:02 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=root, password=****}
abr 20, 2016 12:20:02 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
abr 20, 2016 12:20:02 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
abr 20, 2016 12:20:03 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
abr 20, 2016 12:20:03 PM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
abr 20, 2016 12:20:04 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory

TESTECONSULTA:

package br.com.alura.teste;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.alura.modelo.Conta;
import br.com.alura.modelo.Movimentacao;
import br.com.alura.util.JPAUtil;

public class TesteConsulta {

    public static void main(String[] args) {

        EntityManager manager = new JPAUtil().getEntityManager();
        manager.getTransaction().begin();

        Conta conta = new Conta();
        conta.setId(1);

//        Positional Parameter Notation
//        Query query = manager.createQuery("select m from Movimentacao m where m.conta = ?1");
//        query.setParameter(1, conta);

//        Named Parameter Notation
        Query query = manager.createQuery("select m from Movimentacao m where m.conta = :pConta");
        query.setParameter("pConta", conta);

        List<Movimentacao> movimentacoes = query.getResultList();

        for (Movimentacao m : movimentacoes) {
            System.out.println("DESCRIÇÃO....... "+ m.getDescricao());
            System.out.println("VALOR ........R$ "+ m.getValor());
        }

        manager.getTransaction().commit();
        manager.close();
    }

}
11 respostas

Boa tarde Pedro Henrique!

Não encontrei nenhum erro neste console que você postou.

Também não encontrei o erro Pedro.

Boa tarde Phelipe Gonçalves e Matheus Castiglioni,

Obrigado pela atenção.

Quando eu executo a classe TesteConsulta aparece uma mensagem do Eclipe:

Confirm Perspective Switch

This kind of launch is configured to open the Debug persective when it suspends.

This Debug perspective is designed to support aplication debugging. It incorporates views for displaying the debug stack, variables and breakpoint managemente.

Do you want to open this perspective now?

E com isso o comando de select não é realizado.

Pedro você não esta rodando em modo debug o teste será ?

Aparece uma caixa de dialogo para você escolhe entre sim ou não ?

Isso, aparece essa caixa de diálogo em inglês, eu escolho a opção não, mas mesmo assim não roda o meu programa.

Quando você esta rodando, esta escolhendo a opção "Debug As / Java Application" ? se sim rode como "Run As / Java Application".

Agora aparece

abr 20, 2016 4:13:16 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Movimentacao is not mapped [select m from Movimentacao m where m.conta = :pConta]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:294)
    at br.com.alura.teste.TesteConsulta.main(TesteConsulta.java:28)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Movimentacao is not mapped [select m from Movimentacao m where m.conta = :pConta]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1907)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291)
    ... 1 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Movimentacao is not mapped
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171)
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:79)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3704)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3593)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:718)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:574)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
    ... 9 more

Você declarou a entidade no persistence.xml?

<class>br.com.caelum.financas.modelo.Movimentacao</class>

Sim, no meu caso é

<class>br.com.alura.modelo.Movimentacao</class>
`

Segue:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <!-- unidade de persistencia com o nome financas -->
    <persistence-unit name="JPA_UTIL">
                       <!-- JPA_UTIL -->        
        <!-- Implementação do JPA, no nosso caso Hibernate -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!-- Aqui são listadas todas as entidades -->
        <class>br.com.alura.modelo.Conta</class>
        <class>br.com.alura.modelo.Movimentacao</class>
        <properties>
            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/financas" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <!-- Configurações específicas do Hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Pessoal Obrigado pela atenção. Descobri onde estava o erro. Eu coloquei o atributo name na anotação @Entity da duas classes (Conta e Movimentação). Eu não sei porque, mas quando eu retirei, funcionou.


@Entity (name = "tb_conta")
public class Conta {

//...

}

@Entity (name = "tb_movimentacao")
public class Movimentacao{

//...
}
solução!

Na verdade, como eu nomeei a @Entity, deveria usar o nome da entidade na especificação da QUERY, ou seja,

@Entity (name = "tb_movimentacao")
public class Movimentacao{

//...
}

Então:

Query query = manager.createQuery("select m from tb_movimentacao m where m.conta = :pConta");
        query.setParameter("pConta", conta);