QuerySyntaxException[RESOLVIDO]

4 respostas
cido18

Olá a todos estou com um problema de testar um método, toda vez que tento executar o teste recebo a seguinte exception abaixo:

2013-11-08 20:47:20,575 DEBUG - Logging Provider: org.jboss.logging.Log4jLoggerProvider - [org.jboss.logging] 
  2013-11-08 20:47:21,085 INFO  - HCANN000001: Hibernate Commons Annotations {4.0.1.Final} - [org.hibernate.annotations.common.Version] 
  2013-11-08 20:47:21,108 INFO  - HHH000412: Hibernate Core {4.1.8.Final} - [org.hibernate.Version] 
  2013-11-08 20:47:21,116 INFO  - HHH000206: hibernate.properties not found - [org.hibernate.cfg.Environment] 
  2013-11-08 20:47:21,121 INFO  - HHH000021: Bytecode provider name : javassist - [org.hibernate.cfg.Environment] 
  2013-11-08 20:47:22,518 INFO  - HHH000402: Using Hibernate built-in connection pool (not for production use!) - [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] 
  2013-11-08 20:47:22,537 INFO  - HHH000115: Hibernate connection pool size: 20 - [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] 
  2013-11-08 20:47:22,538 INFO  - HHH000006: Autocommit mode: true - [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] 
  2013-11-08 20:47:22,539 INFO  - HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/cg] - [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] 
  2013-11-08 20:47:22,540 INFO  - HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto} - [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] 
  2013-11-08 20:47:23,434 INFO  - HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect - [org.hibernate.dialect.Dialect] 
  2013-11-08 20:47:23,526 INFO  - HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory - [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] 
  2013-11-08 20:47:23,543 INFO  - HHH000397: Using ASTQueryTranslatorFactory - [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] 
  2013-11-08 20:47:23,710 INFO  - HV000001: Hibernate Validator 4.3.0.Final - [org.hibernate.validator.internal.util.Version] 
  2013-11-08 20:47:24,716 INFO  - HHH000228: Running hbm2ddl schema update - [org.hibernate.tool.hbm2ddl.SchemaUpdate] 
  2013-11-08 20:47:24,716 INFO  - HHH000102: Fetching database metadata - [org.hibernate.tool.hbm2ddl.SchemaUpdate] 
  2013-11-08 20:47:24,721 INFO  - HHH000396: Updating schema - [org.hibernate.tool.hbm2ddl.SchemaUpdate] 
  2013-11-08 20:47:24,786 INFO  - HHH000261: Table found: cg.transacao - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,786 INFO  - HHH000037: Columns: [id, categoria, usuario_id, valor, data, descricao, tipotransacao] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,787 INFO  - HHH000108: Foreign keys: [fkb62e16583bdb9bd1] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,787 INFO  - HHH000126: Indexes: [fkb62e16583bdb9bd1, primary] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,816 INFO  - HHH000261: Table found: cg.usuario - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,817 INFO  - HHH000037: Columns: [id, status, email, nome, senha] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,817 INFO  - HHH000108: Foreign keys: [] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,817 INFO  - HHH000126: Indexes: [primary] - [org.hibernate.tool.hbm2ddl.TableMetadata] 
  2013-11-08 20:47:24,820 INFO  - HHH000232: Schema update complete - [org.hibernate.tool.hbm2ddl.SchemaUpdate] 
  2013-11-08 20:47:25,075 ERROR - HHH000177: Error in named query: buscaTodos - [org.hibernate.internal.SessionFactoryImpl] 
  org.hibernate.hql.internal.ast.QuerySyntaxException: usuario is not mapped [select o from usuario o]
	at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
	at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
	at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
	at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3291)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3180)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
	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:1069)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:517)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
	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 br.com.cg.dao.JPAUtil.<clinit>(JPAUtil.java:10)
	at br.com.cg.utilidades.Acesso.existeUsuario(Acesso.java:24)
	at br.com.cg.teste.login.LoginTest.verificaLoginComFalha(LoginTest.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
.
.
.

Esta exception acontece para todos os namedQuery declarados na classe Usuario, abaixo:

package br.com.cg.modelo;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.cg.utilidades.Cripto;



@Entity
@Table(name = "usuario")
@NamedQueries({
	@NamedQuery(name = "buscaPorEmail", query = "select o from usuario o where o.email = :pEmail"),
 	@NamedQuery(name = "buscaPorNome", query = "select o from usuario o where o.nome = :pNome"),
 	@NamedQuery(name = "buscaPorId", query = "select o from usuario o where o.id = :pId"),
 	@NamedQuery(name = "buscaTodos", query = "select o from usuario o")
 })
public class Usuario {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String nome;
	private String email;
	private String senha;
	private Boolean status;

	@OneToMany(mappedBy = "usuario")
	private List<Transacao> transacoes;

	public List<Transacao> getTransacoes() {
		return transacoes;
	}

	public void setTransacoes(List<Transacao> transacoes) {
		this.transacoes = transacoes;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		Cripto cripto = new Cripto();
		this.senha = cripto.encrypt(senha);
	}

	public Long getId() {
		return id;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}

	@Override
	public String toString() {
		return "Usuario [id=" + id + ", nome=" + nome + ", email=" + email
				+ ", senha=" + senha + ", status=" + status + ", transacoes="
				+ transacoes + "]";
	}
}

o estranho é que associei a classe ao persistence.xml:

<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">

	<persistence-unit name="cg">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>br.com.cg.modelo.Usuario</class>
		<properties>
		
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/cg" />
			<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>

Desculpe o post gigante ,alguém tiver alguma ideia do que está acontecendo...

4 Respostas

pmlm

A tua entidade é Usuario e não usuario.

As tuas namesqueries devem ser sobre a entidade e não sobre a tabela.

cido18

olá pmlm,

Obrigado por responder, realmente era o que você postou mas não consegui entender porque no NamedQueries devo colocar o nome do entity e não da tabela.

pmlm

Quando usas o Hibernate, deixas de ter SQL e passas a ter HQL.

Com o SQL operas com tabelas e colunas.
Com o HQL operas com entidades e atributos.

cido18

Entendi!, obrigado

Criado 8 de novembro de 2013
Ultima resposta 12 de nov. de 2013
Respostas 4
Participantes 2