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"));
}
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??
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"));
}