[RESOLVIDO]Duvida Hql

Bom dia!

Estou lendo a documentação do hibernate usando hql e estou com um problema:

Encontreio seguinte na documentação:

Implementei o meu construtor com os parametros que quero que minha pesquisa retorne porem tenho o seguinte erro:

SEVERE: Exception sending context initialized event to listener instance of class br.com.mercadolivre.robot.servlet.RobotContextListener
org.hibernate.HibernateException: org.hibernate.exception.SQLGrammarException: could not execute query
	at br.com.mercadolivre.robot.config.Application.getSessionFactory(Application.java:33)
	at br.com.mercadolivre.robot.servlet.RobotContextListener.contextInitialized(RobotContextListener.java:62)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2216)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
	at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
	at br.com.mercadolivre.robot.domain.repository.common.QueryList.list(QueryList.java:38)
	at br.com.mercadolivre.robot.domain.repository.FlagRepository.<init>(FlagRepository.java:29)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:96)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:260)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addEntity(AnnotatedDomainModel.java:230)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addAllEntities(AnnotatedDomainModel.java:258)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.model(AnnotatedDomainModel.java:87)
	at br.com.mercadolivre.robot.config.Application.config(Application.java:38)
	at br.com.mercadolivre.robot.config.Application.getSessionFactory(Application.java:28)
	... 16 more

minha pesquisa:


	@Override
	public Query<Flag> findAll() {
		return new QueryList<Flag>(this.getSession().createSQLQuery("Select new Flag(f.identity,f.name) from Flag f"));
	}

Alguém tem uma ideia do que possa ser?

Obrigado

USA SQL mesmo !

tenta colocar o select com s minusculo e o pacote da classe q tu esta dando o new. Tipo:

sendo q a classe Uf tem q ter o construtor q receba esses argumentos nessa ordem tipo:

public Uf(Integer id, String nome){ this.id = id; this.uf = uf; }

se ainda der problema continua postando ai.

Então estou querendo usar esse comando pra não ter como retorno um array de Object

Então, eu tenho o construtor que recebe os parametros

CLasse flag:



package br.com.mercadolivre.robot.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name="flag")
public class Flag implements br.com.conrado.j4b.domain.Entity {	
	
	private static final long serialVersionUID = -5070854020940064424L;
	
	@Id	
	private Long identity;
	private String name;
	@OneToMany(mappedBy="flag",fetch=FetchType.LAZY)
	private Set<TransactionMPTNS> transactions = new HashSet<TransactionMPTNS>(); 
	
	public Flag() {
		
	}
	
	public Flag(Long identity, String name) {
		this.identity = identity;
		this.name = name;
	}
	
	public Long getIdentity() {
		return identity;
	}

	public void setIdentity(Long identity) {
		this.identity = identity;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}	

	public Set<TransactionMPTNS> getTransactions() {
		return transactions;
	}

	public void addTransactionMPTNS(TransactionMPTNS transaction) {
		this.transactions.add(transaction);
	}
	
	public boolean removeTransactionMPTNS(TransactionMPTNS transaction) {
		return this.transactions.remove(transaction);
	}

	@Override
	public int hashCode() {
		return  this.identity.hashCode();	
	}
	
	@Override
	public boolean equals(Object obj) {		
		return obj instanceof Flag && this.equals((Flag)obj);
	}
	
	private boolean equals(Flag other) {		
		return this.identity.equals(other.identity);
	}
}

Ai fiz a pesquisa assim:


@Override
	public Query<Flag> findAll() {
		return new QueryList<Flag>(this.getSession().createSQLQuery("select new br.com.mercadolivre.robot.domain.Flag (f.identity,f.name) from Flag f"));
	}

continua com erro:


ARNING: SQL Error: 1064, SQLState: 42000
18/02/2010 09:15:00 org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.com.mercadolivre.robot.domain.Flag (f.identity,f.name) from Flag f' at line 1
org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2216)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
	at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
	at br.com.mercadolivre.robot.domain.repository.common.QueryList.list(QueryList.java:38)
	at br.com.mercadolivre.robot.domain.repository.FlagRepository.<init>(FlagRepository.java:29)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:96)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:260)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addEntity(AnnotatedDomainModel.java:215)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addAllEntities(AnnotatedDomainModel.java:243)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.model(AnnotatedDomainModel.java:72)
	at br.com.mercadolivre.robot.config.Application.config(Application.java:38)
	at br.com.mercadolivre.robot.config.Application.getSessionFactory(Application.java:28)
	at br.com.mercadolivre.robot.servlet.RobotContextListener.contextInitialized(RobotContextListener.java:62)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.com.mercadolivre.robot.domain.Flag (f.identity,f.name) from Flag f' at line 1
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
	at com.mysql.jdbc.Util.getInstance(Util.java:378)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3378)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3310)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1853)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1976)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1888)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
	at org.hibernate.loader.Loader.doQuery(Loader.java:674)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2213)
	... 37 more
Hibernate: 
    select
        new br.com.mercadolivre.robot.domain.Flag (f.identity,
        f.name) 
    from
        Flag f
18/02/2010 09:15:02 org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 1064, SQLState: 42000
18/02/2010 09:15:02 org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.com.mercadolivre.robot.domain.Flag (f.identity,f.name) from Flag f' at line 1

Alguma ideia? Tem que ter alguma configuração no xml ou annotation em algum lugar??

Abraços

Ao inves de usar

tente

porque createSQLQuery é pra sql nativo pra HQL onde funciona o new tem que ser o metodo createQuery

Um simples:

Não resolve seu problema?

No hibernate.cfg.xml coloca a opção show_sql como true, para você ver o SQL que o Hibernate está gerando, pode te ajudar.

Valeu esqueleto!

Funcionou!

Era só trocar o metodo mesmo deixei assim:

@Override
	public Query<Flag> findAll() {
		return new QueryList<Flag>(this.getSession().createQuery("select new Flag(identity,name) from Flag "));
}

Obrigado pela ajuda de todos!

Abraços

[quote=brucsantos]Bom dia!

Estou lendo a documentação do hibernate usando hql e estou com um problema:

Encontreio seguinte na documentação:

Implementei o meu construtor com os parametros que quero que minha pesquisa retorne porem tenho o seguinte erro:

SEVERE: Exception sending context initialized event to listener instance of class br.com.mercadolivre.robot.servlet.RobotContextListener
org.hibernate.HibernateException: org.hibernate.exception.SQLGrammarException: could not execute query
	at br.com.mercadolivre.robot.config.Application.getSessionFactory(Application.java:33)
	at br.com.mercadolivre.robot.servlet.RobotContextListener.contextInitialized(RobotContextListener.java:62)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2216)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
	at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
	at br.com.mercadolivre.robot.domain.repository.common.QueryList.list(QueryList.java:38)
	at br.com.mercadolivre.robot.domain.repository.FlagRepository.<init>(FlagRepository.java:29)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:96)
	at br.com.conrado.j4b.reflection.ReflectionUtils.newInstance(ReflectionUtils.java:260)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addEntity(AnnotatedDomainModel.java:230)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.addAllEntities(AnnotatedDomainModel.java:258)
	at br.com.conrado.j4b.domain.AnnotatedDomainModel.model(AnnotatedDomainModel.java:87)
	at br.com.mercadolivre.robot.config.Application.config(Application.java:38)
	at br.com.mercadolivre.robot.config.Application.getSessionFactory(Application.java:28)
	... 16 more

minha pesquisa:


	@Override
	public Query<Flag> findAll() {
		return new QueryList<Flag>(this.getSession().createSQLQuery("Select new Flag(f.identity,f.name) from Flag f"));
	}

Alguém tem uma ideia do que possa ser?

Obrigado
[/quote]

Não é mesmo problema ai de cima?

Não entendi??? srsrs :oops:

Acho que eu fui editar o topico para resolvido e acabei postando novamente… mals ai!srsrsr

Abraços

Blz entao. Qualquer estamos ai pra ajudar.

Nossa, nem tinha percebido o createSQLQuery, mandou bem esqueleto :slight_smile:

Pessoal não querendo ser chato, mais ja sendo srsrsr

Será que vc’s podem me ajudar nesse topico:


http://www.guj.com.br/posts/list/198427.java

Abraços