Foros del Web » Programación para mayores de 30 ;) » Java »

org.hibernate.exception.SQLGrammarException: could not execute query

Estas en el tema de org.hibernate.exception.SQLGrammarException: could not execute query en el foro de Java en Foros del Web. Hola, aun sigo sin poder hacer mi primera query en HQL con Hibernate, no pensé que fuera tan endiabladamente complicado configurar esto... Supongo que cuando ...
  #1 (permalink)  
Antiguo 11/02/2011, 19:07
 
Fecha de Ingreso: febrero-2011
Ubicación: España
Mensajes: 51
Antigüedad: 13 años, 2 meses
Puntos: 1
org.hibernate.exception.SQLGrammarException: could not execute query

Hola, aun sigo sin poder hacer mi primera query en HQL con Hibernate, no pensé que fuera tan endiabladamente complicado configurar esto... Supongo que cuando logre ejecutar la primera query todo irá sobre ruedas, pero esto ya me está superando... nunca me había costado tanto configurar un framework y dar tantas vueltas.

Bueno, éste es el hibernate.cfg.xml:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  3. <hibernate-configuration>
  4.   <session-factory>
  5.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  6.     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  7.     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mibasededatos</property>
  8.     <property name="hibernate.connection.username">root</property>
  9.     <property name="hibernate.connection.password">12345</property>
  10.     <property name="hibernate.show_sql">true</property>
  11.     <property name="hibernate.current_session_context_class">thread</property>
  12.     <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
  13.     <mapping resource="persona.hbm.xml"/>
  14.   </session-factory>
  15. </hibernate-configuration>

Éste es el mapping del bean (no pongo el bean, todos los datos son String excepto la clave que es Long):

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  3. <hibernate-mapping>
  4.   <class name="com.myapp.struts.ConsultarDatosUsuarioHibernate" table="persona">
  5.   <id name="id" column="id" type="java.lang.Long">
  6.     <generator class="native"/>
  7.   </id>
  8.   <property name="nombre" column="nombre" type="java.lang.String"/>
  9.   <property name="apellido1" column="apellido1" type="java.lang.String"/>
  10.   <property name="apellido2" column="apellido2" type="java.lang.String"/>
  11.   <property name="correo" column="email" type="java.lang.String"/>
  12.   <property name="usuario" column="username" type="java.lang.String"/>
  13.   <property name="telefono" column="telefono" type="java.lang.String"/>
  14.   <property name="password" column="password" type="java.lang.String"/>
  15.   <property name="rol" column="rolid" type="java.lang.String"/>
  16.   </class>
  17. </hibernate-mapping>

Esto es el fragmento de la clase donde se invoca la query (la más simple, como veis):

Código Java:
Ver original
  1. BasicConfigurator.configure();
  2.             Logger.getLogger("org.hibernate").setLevel(Level.WARN);
  3.  
  4.             Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  5.             session.beginTransaction();
  6.             Query query = session.createQuery("from persona");
  7.             List<ConsultarDatosUsuarioHibernate> result = query.list();
  8.  
  9.             session.getTransaction().commit();

Y ésta la pila de errores:

Código Apache:
Ver original
  1. org.hibernate.exception.SQLGrammarException: could not execute query
  2.         at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
  3.         at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
  4.         at org.hibernate.loader.Loader.doList(Loader.java:2223)
  5.         at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
  6.         at org.hibernate.loader.Loader.list(Loader.java:2099)
  7. Etc.

Alguna idea? Estoy por tirar el portátil por la ventana :D

Mis sospechas van por dos sitios:

1. O hay incompatibilidad de tipos entre el mapping y la tabla de MySql (no debería, son todos varchar excepto la clave que es integer)...

2. O es que aun no he efectuado ningún "insert" propiamente dicho con HQL, aunque sí lo he hecho a mano, es decir, que datos en la tabla hay, lo que quiero es sacarlos de la misma. No creo que esta opción tenga mucho sentido, ya que hablamos del modelo objeto-relacional, es decir si hay datos en la tabla debería sacarlos, me inclino más por la de arriba aunque tampoco estoy muy convencido.

Gracias como siempre!
  #2 (permalink)  
Antiguo 12/02/2011, 12:38
 
Fecha de Ingreso: febrero-2011
Ubicación: España
Mensajes: 51
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

Alguna idea? Sigo dando vueltas y no logro alcanzar la solución...
  #3 (permalink)  
Antiguo 12/02/2011, 15:48
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Ubicación: por ahi!!!
Mensajes: 113
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

Hola. Estaria bueno ver el log y el stacktrace completo.

Veo que estas haciendo un query sobre las tablas y no sobre tus clases.
el metodo que invocas es sobre HQL es decir sobre el esquema de objetos.

-->createQuery(String queryString)
Create a new instance of Query for the given HQL query string.

La idea de trabajar en un ORM es siempre estar del lado de objetos.
Y lo mas aconsejable es utilizar consultas con Criteria en todos los casos.
En donde no puedas porque es muy complejo realizarlo usa HQL pero dentro
de un namedQuery, ya que de esa manera te aseguras que cuando verifica el mapeo
al iniciar tu app te aseguras que esas HQL son correctas. Y en muy pocos casos
deberias usar SQL nativo sobre Hibernate.

Como practica es bueno mirar el java doc de tu api.

Saludos.
  #4 (permalink)  
Antiguo 13/02/2011, 15:32
 
Fecha de Ingreso: febrero-2011
Ubicación: España
Mensajes: 51
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

Cita:
Iniciado por megajandro Ver Mensaje
Hola. Estaria bueno ver el log y el stacktrace completo.

Veo que estas haciendo un query sobre las tablas y no sobre tus clases.
el metodo que invocas es sobre HQL es decir sobre el esquema de objetos.

-->createQuery(String queryString)
Create a new instance of Query for the given HQL query string.

La idea de trabajar en un ORM es siempre estar del lado de objetos.
Y lo mas aconsejable es utilizar consultas con Criteria en todos los casos.
En donde no puedas porque es muy complejo realizarlo usa HQL pero dentro
de un namedQuery, ya que de esa manera te aseguras que cuando verifica el mapeo
al iniciar tu app te aseguras que esas HQL son correctas. Y en muy pocos casos
deberias usar SQL nativo sobre Hibernate.

Como practica es bueno mirar el java doc de tu api.

Saludos.
Gracias por tu respuesta megajandro!

El caso es que soy nuevo con este framework y desconocía la existencia de tal clase, simplemente me he limitado a seguir los tutoriales. Voy a probar con ella a ver si funciona!

Un saludo.
  #5 (permalink)  
Antiguo 15/02/2011, 09:08
 
Fecha de Ingreso: febrero-2011
Ubicación: España
Mensajes: 51
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

Gracias megajandro, en cuanto probé la clase Criteria puede hacer la consulta!
  #6 (permalink)  
Antiguo 07/09/2012, 11:37
Avatar de Dragon_Negro  
Fecha de Ingreso: septiembre-2012
Ubicación: Colombia
Mensajes: 3
Antigüedad: 11 años, 7 meses
Puntos: 0
Pregunta Pregunta: org.hibernate.exception.SQLGrammarException: could not execute query

Tengo un problema con hibernate ya que en las tablas en las que estoy trabajando no hay ninguna relación referencial y una de ellas no tiene llaves primarias.

Actualmente estoy manejando los query con la utilidad nativa por inconvenientes anteriormente presentados por criterial y query.

Me aparece el error expuesto en el foro pero ya he intentado todo para desarrollarlo, recuerden que el problema radica que las tablas manejadas no tienen integridad referencial y además tienen ambas entidadades columnas con el mismo nombre.

Describo lo que he hecho actualmente para dar solución al problema:

1) Utilice addEntity() para agregar el alias que utiliza la tabla.
2) Sin utilizar addEntity tampoco funciona
3) En la construcción de los resultados de la sentencia realizo la siguiente transformación consulta.setResultTransformer( Transformers.aliasToBean( clase ) );
4) para que no hallan problemas con los atributos traidos del select se agregan todos los atributos de las tablas con sus respectivos alias con el método addscalar();

Coloco a continuación la sentencia ejecutada y el problema dado en el log:

this.setHql( "SELECT tx.*, o.* FROM co.com.pojos.Tab1 tx, co.com.pojos.Tab2 o WHERE "
+ " tx.codigo = o.codigo AND tx.orden = o.orden AND tx.servicio = o.servicio AND tx.codigo = :codigo "
+ " AND o.idPersona = :dato1 AND tx.estado = 'CAPTURADA' AND TRUNC(SYSDATE) >= tx.fechasolicitud + :dias" );


java.sql.SQLException: ORA-00933: comando SQL no terminado correctamente

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:2 89)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol .java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe (TTC7Protocol.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery( OracleStatement.java:2391)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTi meout(OracleStatement.java:2672)
at oracle.jdbc.driver.OraclePreparedStatement.execute Update(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute Query(OraclePreparedStatement.java:527)
at org.jboss.resource.adapter.jdbc.WrappedPreparedSta tement.executeQuery(WrappedPreparedStatement.java: 342)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(Ab stractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.ja va:1812)
at org.hibernate.loader.Loader.doQuery(Loader.java:69 7)
at org.hibernate.loader.Loader.doQueryAndInitializeNo nLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:223 2)
at org.hibernate.loader.Loader.listIgnoreQueryCache(L oader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.custom.CustomLoader.list(Cust omLoader.java:312)
at org.hibernate.impl.SessionImpl.listCustomQuery(Ses sionImpl.java:1723)
at org.hibernate.impl.AbstractSessionImpl.list(Abstra ctSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl. java:175)
at co.com.ConsultaNativa.obtenerConsulta(ConsultaNati va.java:137)
at co.com.clasea.metodo1(clasea.java:953)
at co.com.xx1(xx1.java:177)
at co.com.xx2(xx2.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.xml.ws.api.server.InstanceResolver$1.invok e(InstanceResolver.java:246)
at com.sun.xml.ws.server.InvokerTube$2.invoke(Invoker Tube.java:146)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.in voke(EndpointMethodHandler.java:257)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRe quest(SEIInvokerTube.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:5 98)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:55 7)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542 )
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:4 39)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSE ndpointImpl.java:243)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpTool kit.handle(HttpAdapter.java:444)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(H ttpAdapter.java:244)
at com.sun.xml.ws.transport.http.servlet.ServletAdapt er.handle(ServletAdapter.java:135)
at com.sun.xml.ws.transport.http.servlet.WSServletDel egate.doGet(WSServletDelegate.java:129)
at com.sun.xml.ws.transport.http.servlet.WSServletDel egate.doPost(WSServletDelegate.java:160)
at com.sun.xml.ws.transport.http.servlet.WSServlet.do Post(WSServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:803)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doF ilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationV alve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.inv oke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionV alve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:722)
2012-09-07 12:07:24,716 INFO [STDOUT] WARN JDBCExceptionReporter - SQL Error: 933, SQLState: 42000
2012-09-07 12:07:24,717 INFO [STDOUT] ERROR JDBCExceptionReporter - ORA-00933: comando SQL no terminado correctamente
2012-09-07 12:07:24,744 ERROR [STDERR] sep 07, 2012 12:07:24 PM co.com.xx Grave: Fri Sep 07 12:07:24 COT 2012 Se ha presentado un error en xx.metodo(getMetodo request) -->
org.hibernate.exception.SQLGrammarException: could not execute query
2012-09-07 12:07:24,765 ERROR [STDERR] sep 07, 2012 12:07:24 PM co.com.xxx close
Información: Fri Sep 07 12:07:24 COT 2012 Cerrando objetos de conexion...
2012-09-07 12:07:24,767 INFO [STDOUT] INFO SessionFactoryImpl - closing
2012-09-07 12:07:24,776 INFO [STDOUT] DEBUG ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2012-09-07 12:07:24,921 DEBUG [org.jboss.resource.connectionmanager.TxConnectionM anager] Unfinished local transaction was rolled back.org.jboss.resource.connectionmanager.TxConnec tionManager$TxConnectionEventListener@30ae26[state=NORMAL mc=org.jboss.resource.adapter.jdbc.local.LocalMana gedConnection@ce2d77 handles=0 lastUse=1347037317829 permit=true trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossMana gedConnectionPool$OnePool@b1041 context=org.jboss.resource.connectionmanager.Inter nalManagedConnectionPool@583511 xaResource=org.jboss.resource.connectionmanager.Tx ConnectionManager$LocalXAResource@1042ac3 txSync=null]
2012-09-07 12:07:24,944 ERROR [STDERR] sep 07, 2012 12:07:24 PM co.com.xx close
Información: Fri Sep 07 12:07:24 COT 2012 Objetos de conexion cerrados.
2012-09-07 12:07:24,963 ERROR [STDERR] sep 07, 2012 12:07:24 PM co.com.xx Información: Fri Sep 07 12:07:24 COT 2012 Respuesta:
response.getURLRedirect() --> FAIL_SYSTEM
response.getReturnDesc() --> Se ha presentado un error en xx(xx request) -->
could not execute query


Nota las clases y metodos xx en realidad no importan ya que tengo que tener seguridad.

La sentencia que aparece en el log por hibernate se ejecuta correctamente en Oracle.

Última edición por Dragon_Negro; 07/09/2012 a las 11:50
  #7 (permalink)  
Antiguo 08/09/2012, 11:40
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

¿Y donde haces por código el replace de cada :atributo por su correspondiente variable?

Por cierto, no reabras post de más de 6 meses, en vez de eso se recomienda abrirlos nuevos.

Aunque sigo pensando que la mejor forma de arreglar esto es programando el bloqueao automático de los posts de este foro una vez se cumplan los 6 meses de su creación ¬¬.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 08/09/2012, 11:50
Avatar de Dragon_Negro  
Fecha de Ingreso: septiembre-2012
Ubicación: Colombia
Mensajes: 3
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: org.hibernate.exception.SQLGrammarException: could not execute query

Los parámetros también son pasados en el código con setString o setParameter de hibernate, con ambos métodos he probado y no se que pasa.

Espero cubrir la pregunta

Etiquetas: execute, query
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:13.