-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Strange problem with a simple query
PostPosted: Fri Jul 15, 2005 6:29 am 
Beginner
Beginner

Joined: Thu May 26, 2005 10:22 am
Posts: 20
Hello everybody.
I'm using Hibernate in my proyect, and till now it has been working perfectly. But now, I have a problem doing a simple query. I have three mapped classes, called
TOPlanos, TOPlanosGMS and TOPlanosSAP, where TOPlanos has a one-to-one relation wich each one. TOPlanos has a property called idOrdenTrabajo and I need to find all TOPlanos
for a given idOrdenTrabajo. So I have written a very simple Hibernate Query that does
the search but I get an exception that tells it cannot find the column idOrdenTrabajo in the database. The strange thing is that this property is not mapped to that name column, it
is mapped to ordenes_trabajo_id_orden_trabajo column. It seems that it is searching for the column with the same name of the property, not for the name I have mapped in the .hbm to the database.

Here I put all the mapping and code data. I don't know if there is something wrong with
the mappings but I has been working correctly till I've tried that query.

Thank you in advance.

Regards.

Daniel.


Hibernate version:
3.0
Mapping documents:

<hibernate-mapping>

<!-- Clase Planos -->
<class name="com.ga.gdcad.planos.logic.planos.to.TOPlanos" table="planos">

<id name="idPlano" type="integer" column="id_plano">
<generator class="sequence">
<param name="sequence">planos_id_plano_seq</param>
</generator>
</id>

<property name="idOrdenTrabajo" column="ordenes_trabajo_id_orden_trabajo" type="integer"/>

<one-to-one name="planoGMS"
class="com.ga.gdcad.planos.logic.planos.to.TOPlanosGMS"
cascade="save-update"/>
<one-to-one name="planoSAP"
class="com.ga.gdcad.planos.logic.planos.to.TOPlanosSAP"
cascade="save-update"/>
<set name="versiones" inverse="true" lazy="true" cascade="save-update">
<key column="planos_id_plano"/>
<one-to-many class="com.ga.gdcad.planos.logic.versiones.to.TOVersiones"/>
</set>
<set name="personas" lazy="true" table="planos_has_personas">
<key column="planos_id_plano"/>
<one-to-many class="com.ga.gdcad.planos.logic.planos.to.TOPlanosPersonas"/>
</set>
</class>

</hibernate-mapping>

<hibernate-mapping>

<!-- Clase PlanosSAP -->
<class name="com.ga.gdcad.planos.logic.planos.to.TOPlanosSAP" table="planos_sap">

<id name="idPlano" type="integer" column="planos_id_plano">
<generator class="foreign">
<param name="property">plano</param>
</generator>
</id>

<property name="codMaterial" column="cod_material" type="string"/>
<property name="nivelSAP" column="nivel_sap" type="string"/>

<one-to-one name="plano"
class="com.ga.gdcad.planos.logic.planos.to.TOPlanos"
constrained="true"/>


</class>

</hibernate-mapping>

<hibernate-mapping>

<!-- Clase PlanosGMS -->
<class name="com.ga.gdcad.planos.logic.planos.to.TOPlanosGMS" table="planos_gms">

<id name="idPlano" type="integer" column="planos_id_plano">
<generator class="foreign">
<param name="property">plano</param>
</generator>
</id>
<property name="descripcion" column="descripcion" type="string"/>
<property name="idMaterial" column="proyectos_has_materiales_materiales_id_material" type="integer"/>
<property name="idProyecto" column="proyectos_has_materiales_proyectos_id_proyecto" type="integer"/>


<one-to-one name="plano"
class="com.ga.gdcad.planos.logic.planos.to.TOPlanos"
constrained="true"/>


</class>

</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():

toPlanos = boPlanos.fetchByOrdenTrabajo(new Integer(933));

and here is what fetchByOrdenTrabajo does inside the DAO:

Session session = HibernateUtil.getSession();
HibernateUtil.beginTransaction();

Query query = session.createQuery("from TOPlanos where idOrdenTrabajo " +
"= :idOrdenTrabajo");
query.setParameter("idOrdenTrabajo", idOT);
List planos = query.list();


Full stack trace of any exception that occurs:
362046 [http-9060-Processor75] WARN util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42703
362047 [http-9060-Processor75] ERROR util.JDBCExceptionReporter - ERROR: column "idordentrabajo" does not exist

com.ga.gdcad.services.db.dao.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
com.ga.gdcad.services.db.dao.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
at com.ga.gdcad.planos.logic.planos.dao.DAOPlanosHibernate.fetchByOrdenTrabajo(DAOPlanosHibernate.java:123)
at com.ga.gdcad.planos.logic.planos.bo.BOPlanos.fetchByOrdenTrabajo(BOPlanos.java:30)
at com.ga.gdcad.planos.web.MainAction.execute(MainAction.java:61)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:506)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.ga.gdcad.services.db.dao.TransactionFilter.doFilter(TransactionFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1525)
at org.hibernate.loader.Loader.list(Loader.java:1505)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:400)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:791)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.ga.gdcad.planos.logic.planos.dao.DAOPlanosHibernate.fetchByOrdenTrabajo(DAOPlanosHibernate.java:106)
... 38 more
Caused by: org.postgresql.util.PSQLException: ERROR: column "idordentrabajo" does not exist

at org.postgresql.util.PSQLException.parseServerError(PSQLException.java:139)
at org.postgresql.core.QueryExecutor.executeV3(QueryExecutor.java:152)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:100)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:43)
at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:517)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:50)
at org.postgresql.jdbc1.AbstractJdbc1Statement.executeQuery(AbstractJdbc1Statement.java:233)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:118)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1204)
at org.hibernate.loader.Loader.doQuery(Loader.java:368)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:208)
at org.hibernate.loader.Loader.doList(Loader.java:1522)
... 44 more
Name and version of the database you are using:
PostgreSQL 8.0
The generated SQL (show_sql=true):

Debug level Hibernate log excerpt:



Top
 Profile  
 
 Post subject: Re: Strange problem with a simple query
PostPosted: Fri Jul 15, 2005 7:18 am 
Expert
Expert

Joined: Mon Feb 14, 2005 12:32 pm
Posts: 609
Location: Atlanta, GA - USA
dancantong wrote:
Hello everybody.
I'm using Hibernate in my proyect, and till now it has been working perfectly. But now, I have a problem doing a simple query. I have three mapped classes, called
TOPlanos, TOPlanosGMS and TOPlanosSAP, where TOPlanos has a one-to-one relation wich each one. TOPlanos has a property called idOrdenTrabajo and I need to find all TOPlanos
for a given idOrdenTrabajo. So I have written a very simple Hibernate Query that does
the search but I get an exception that tells it cannot find the column idOrdenTrabajo in the database. The strange thing is that this property is not mapped to that name column, it
is mapped to ordenes_trabajo_id_orden_trabajo column. It seems that it is searching for the column with the same name of the property, not for the name I have mapped in the .hbm to the database.

Here I put all the mapping and code data. I don't know if there is something wrong with
the mappings but I has been working correctly till I've tried that query.

Thank you in advance.

Regards.

Daniel.


Query query = session.createQuery("from TOPlanos where idOrdenTrabajo " +
"= :idOrdenTrabajo");


You need to add and use an alias for your object. Hibernate appears to assume that it's a DB column if it doesn't have an alias.

Try "from TOPlanos toplanos where toplanos.idOrdenTrabajo = :idOrdenTrabajo"


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.