-->
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: rare error invalid column name
PostPosted: Thu Jun 24, 2010 1:26 pm 
Newbie

Joined: Wed Jan 30, 2008 6:40 pm
Posts: 3
hi all my name is Edson Chavez From Peru, my nick Grubhart

abstract:
i ran same hql query (only select section is different) and one works but another launch exception
Code:
List<Aplicativos>  aplicativos =   newSession.createQuery("select a from  Aplicativos a join a.liberadores l where a.idAplicativo = :idAplicativo and l.empleado.contrata.idContrata = :idContrata").setString("idAplicativo", idAplicativo).setString("idContrata", idContrata).list();


this works i have a list of Aplicativos when i change select section to
Code:
List<LiberadorContrata>  liberadores =   newSession.createQuery("select l from  Aplicativos a join a.liberadores l where a.idAplicativo = :idAplicativo and l.empleado.contrata.idContrata = :idContrata").setString("idAplicativo", idAplicativo).setString("idContrata", idContrata).list();


the database server is sql server 2005

second query fails
hibernate catch:
org.hibernate.exception.GenericJDBCException: could not execute query

sql server launch this exception:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: El nombre de columna col_0_1_ no es válido.

this say column name col_0_1 is invalid but i can't see this column in generated sql!!!!

my console output show this message
Code:
24-jun-2010 14:06:03 org.hibernate.type.NullableType nullSafeGet
INFO: could not read column value from result set: col_0_1_; El nombre de columna col_0_1_ no es válido.
24-jun-2010 14:06:03 org.hibernate.util.JDBCExceptionReporter logExceptions
ADVERTENCIA: SQL Error: 0, SQLState: S1093
24-jun-2010 14:06:03 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: El nombre de columna col_0_1_ no es válido.


here the sql generated:
Code:
Hibernate:
    select
        liberadore1_.idAplicativo as col_0_0_
    from
        dbo.Aplicativos aplicativo0_
    inner join
        dbo.ContratasLiberador liberadore1_
            on aplicativo0_.idAplicativo=liberadore1_.idAplicativo,
        dbo.ContratasEmpleados empleado2_
    where
        liberadore1_.idEmpleado=empleado2_.idEmpleado
        and aplicativo0_.idAplicativo=?
        and empleado2_.idContrata=?


i search for 2 days and i don't know what's the problem i really apreciate some hints or help in this error,

next my beans code, dao class and test case used:

Aplicativos.java
Code:
package domain;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

import org.hibernate.annotations.CollectionOfElements;

@Entity
public class Aplicativos {
   private String idAplicativo;
   private String aplicativo;
   private String fechaRegistro;
   private String usuarioRegistra;
   private String fechaModifica;
   private String usuarioModifica;
   private String activo;
   
   private List <LiberadorContrata> liberadores = new ArrayList<LiberadorContrata>();

   public Aplicativos(){
      super();
   }
   
   
   @Id
   public String getIdAplicativo() {
      return idAplicativo;
   }
   public void setIdAplicativo(String idAplicativo) {
      this.idAplicativo = idAplicativo;
   }
   public String getAplicativo() {
      return aplicativo;
   }
   public void setAplicativo(String aplicativo) {
      this.aplicativo = aplicativo;
   }
   public String getFechaRegistro() {
      return fechaRegistro;
   }
   public void setFechaRegistro(String fechaRegistro) {
      this.fechaRegistro = fechaRegistro;
   }
   public String getUsuarioRegistra() {
      return usuarioRegistra;
   }
   public void setUsuarioRegistra(String usuarioRegistra) {
      this.usuarioRegistra = usuarioRegistra;
   }
   public String getFechaModifica() {
      return fechaModifica;
   }
   public void setFechaModifica(String fechaModifica) {
      this.fechaModifica = fechaModifica;
   }
   public String getUsuarioModifica() {
      return usuarioModifica;
   }
   public void setUsuarioModifica(String usuarioModifica) {
      this.usuarioModifica = usuarioModifica;
   }
   public String getActivo() {
      return activo;
   }
   public void setActivo(String activo) {
      this.activo = activo;
   }
   
   
   @CollectionOfElements(fetch = FetchType.EAGER)
   @JoinTable (name="ContratasLiberador", joinColumns = @JoinColumn(name = "idAplicativo"))
   public List<LiberadorContrata> getLiberadores() {
      return liberadores;
   }


   public void setLiberadores(List<LiberadorContrata> liberadores) {
      this.liberadores = liberadores;
   }
}


LiberadorContrata.java
Code:
package domain;

import javax.persistence.*;

import org.hibernate.annotations.Parent;

@Embeddable
public class LiberadorContrata {
   
   private Aplicativos aplicativo;
   private Empleado empleado;
   private String fechaRegistro;
   private String usuarioRegistra;
   private String fechaModifica;
   private String usuarioModifica;
   private String activo;
   
   
   
   @Parent
   public Aplicativos getAplicativo() {
      return aplicativo;
   }

   public void setAplicativo(Aplicativos aplicativo) {
      this.aplicativo = aplicativo;
   }

   @ManyToOne
   @JoinColumn(name = "idEmpleado", nullable= false, updatable= false)
   public Empleado getEmpleado() {
      return empleado;
   }
   
   public void setEmpleado(Empleado empleado) {
      this.empleado = empleado;
   }
   
   @Column
   public String getFechaRegistro() {
      return fechaRegistro;
   }
   
   public void setFechaRegistro(String fechaRegistro) {
      this.fechaRegistro = fechaRegistro;
   }
   
   @Column
   public String getUsuarioRegistra() {
      return usuarioRegistra;
   }
   
   public void setUsuarioRegistra(String usuarioRegistra) {
      this.usuarioRegistra = usuarioRegistra;
   }
   
   @Column
   public String getFechaModifica() {
      return fechaModifica;
   }
   
   public void setFechaModifica(String fechaModifica) {
      this.fechaModifica = fechaModifica;
   }
   
   @Column
   public String getUsuarioModifica() {
      return usuarioModifica;
   }
   
   public void setUsuarioModifica(String usuarioModifica) {
      this.usuarioModifica = usuarioModifica;
   }
   
   @Column
   public String getActivo() {
      return activo;
   }
   
   public void setActivo(String activo) {
      this.activo = activo;
   }   
}


Empleado.java
Code:
package domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table (name="ContratasEmpleados")
public class Empleado {
   
   
   private String idEmpleado;
   private String empleado;
   private String password;
   private String mail;
   private String fechaRegistra;
   private String usuarioRegistra;
   private String fechaModifica;
   private String usuarioModifica;
   private String activo;
   
   
   private Contratas contrata;
   
   

   public Empleado(){
      super();
   }
   
   @Id
   public String getIdEmpleado() {
      return idEmpleado;
   }
   public void setIdEmpleado(String idEmpleado) {
      this.idEmpleado = idEmpleado;
   }
   public String getEmpleado() {
      return empleado;
   }
   public void setEmpleado(String empleado) {
      this.empleado = empleado;
   }
   public String getPassword() {
      return password;
   }
   public void setPassword(String password) {
      this.password = password;
   }
   public String getMail() {
      return mail;
   }
   public void setMail(String mail) {
      this.mail = mail;
   }
   public String getFechaRegistra() {
      return fechaRegistra;
   }
   public void setFechaRegistra(String fechaRegistra) {
      this.fechaRegistra = fechaRegistra;
   }
   public String getUsuarioRegistra() {
      return usuarioRegistra;
   }
   public void setUsuarioRegistra(String usuarioRegistra) {
      this.usuarioRegistra = usuarioRegistra;
   }
   public String getFechaModifica() {
      return fechaModifica;
   }
   public void setFechaModifica(String fechaModifica) {
      this.fechaModifica = fechaModifica;
   }
   public String getUsuarioModifica() {
      return usuarioModifica;
   }
   public void setUsuarioModifica(String usuarioModifica) {
      this.usuarioModifica = usuarioModifica;
   }
   public String getActivo() {
      return activo;
   }
   public void setActivo(String activo) {
      this.activo = activo;
   }

   @ManyToOne
   @JoinColumn (name="idContrata",  nullable=false)
   public Contratas getContrata() {
      return contrata;
   }

   public void setContrata(Contratas contrata) {
      this.contrata = contrata;
   }   
}


Contratas.java
Code:
package domain;

import javax.persistence.*;

@Entity
public class Contratas {
   
   private String idContrata;
   private String contrata;
   private String fechaRegistro;
   private String usuarioRegistra;
   private String fechaModifica;
   private String usuarioModifica;
   private String activo;
   private String idSociedad;
   
   public Contratas(){
      super();
   }
   
   @Id
   public String getIdContrata() {
      return idContrata;
   }
   public void setIdContrata(String idContrata) {
      this.idContrata = idContrata;
   }
   public String getContrata() {
      return contrata;
   }
   public void setContrata(String contrata) {
      this.contrata = contrata;
   }
   public String getFechaRegistro() {
      return fechaRegistro;
   }
   public void setFechaRegistro(String fechaRegistro) {
      this.fechaRegistro = fechaRegistro;
   }
   public String getUsuarioRegistra() {
      return usuarioRegistra;
   }
   public void setUsuarioRegistra(String usuarioRegistra) {
      this.usuarioRegistra = usuarioRegistra;
   }
   public String getFechaModifica() {
      return fechaModifica;
   }
   public void setFechaModifica(String fechaModifica) {
      this.fechaModifica = fechaModifica;
   }
   public String getUsuarioModifica() {
      return usuarioModifica;
   }
   public void setUsuarioModifica(String usuarioModifica) {
      this.usuarioModifica = usuarioModifica;
   }
   public String getActivo() {
      return activo;
   }
   public void setActivo(String activo) {
      this.activo = activo;
   }
   
   public String getIdSociedad() {
      return idSociedad;
   }

   public void setIdSociedad(String idSociedad) {
      this.idSociedad = idSociedad;
   }   
}


this class run hql querys

AplicativosDaoImpl
Code:
package dao.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.hibernate.Session;
import org.hibernate.Transaction;

import dao.AplicativosDao;
import domain.Aplicativos;
import domain.Empleado;
import domain.LiberadorContrata;
import com.hochschild.util.HibernateUtil;

public class AplicativosDaoImpl implements AplicativosDao {

   
   
   public Aplicativos[] getAllAplicativos(){
      Session newSession = HibernateUtil.getSessionFactory().openSession();
      Transaction newTransaction = newSession.beginTransaction();
      Aplicativos[] aplicativos =  (Aplicativos[]) newSession.createQuery("from Aplicativos").list().toArray(new Aplicativos[0]);
      
      newTransaction.commit();
      newSession.close();
      HibernateUtil.shutdown();
      
      
      
      return aplicativos ;
   }
   
   public List<Aplicativos> getAplicativos( String idAplicativo, String idContrata){
      Session newSession = HibernateUtil.getSessionFactory().openSession();
      Transaction newTransaction = newSession.beginTransaction();
      
      List<Aplicativos>  aplicativos =   newSession.createQuery("select a from  Aplicativos a join a.liberadores l where a.idAplicativo = :idAplicativo and l.empleado.contrata.idContrata = :idContrata").setString("idAplicativo", idAplicativo).setString("idContrata", idContrata).list();
      
      newTransaction.commit();
      newSession.close();
      HibernateUtil.shutdown();
      
      return aplicativos;
   }
   
   public List<LiberadorContrata> getLiberadores( String idAplicativo, String idContrata){
      Session newSession = HibernateUtil.getSessionFactory().openSession();
      Transaction newTransaction = newSession.beginTransaction();
      List<LiberadorContrata>  liberadores =   newSession.createQuery("select l from  Aplicativos a join a.liberadores l where a.idAplicativo = :idAplicativo and l.empleado.contrata.idContrata = :idContrata").setString("idAplicativo", idAplicativo).setString("idContrata", idContrata).list();
      
      newTransaction.commit();
      newSession.close();
      HibernateUtil.shutdown();
      
      return liberadores;
   }
   
}


you can see methods getLibertadores and getAplicativos use hql querys i wrote above

now my test case:

AplicativosDaoImplTest
Code:
package dao.impl;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;
import domain.*;

public class AplicativosDaoImplTest {

   
   @Test
   public void testGetAplicativos() {
      AplicativosDaoImpl aplicativosDao = new AplicativosDaoImpl();

      List<Aplicativos> liberadores = aplicativosDao.getAplicativos("1", "1");
      assertTrue(liberadores.size()>0 );
      
      LiberadorContrata liberador = liberadores.get(0).getLiberadores().get(0);
      System.out.println(liberador.getEmpleado().getContrata().getIdContrata());
      

   }
   
   @Test
   public void testGetLiberadores() {
      AplicativosDaoImpl aplicativosDao = new AplicativosDaoImpl();

      List<LiberadorContrata> liberadores = aplicativosDao.getLiberadores("1", "1");
      assertTrue(liberadores.size()>0 );
      LiberadorContrata liberador = liberadores.get(0);
      System.out.println(liberador.getEmpleado().getContrata().getIdContrata());
   }

   
   
}

both tests print same expression: variable liberador.getEmpleado().getContrata().getIdContrata()
first test pass and print correct value but second test have error this is the error log:

Code:
org.hibernate.exception.GenericJDBCException: could not execute query
   at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.loader.Loader.doList(Loader.java:2235)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
   at org.hibernate.loader.Loader.list(Loader.java:2124)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
   at com.hochschild.dao.impl.AplicativosDaoImpl.getLiberadores(AplicativosDaoImpl.java:51)
   at com.hochschild.dao.impl.AplicativosDaoImplTest.testGetLiberadores(AplicativosDaoImplTest.java:25)
   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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
   at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
   at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
   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)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: El nombre de columna col_0_1_ no es válido.
   at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
   at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(Unknown Source)
   at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(Unknown Source)
   at org.hibernate.type.StringType.get(StringType.java:41)
   at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
   at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
   at org.hibernate.type.ManyToOneType.hydrate(ManyToOneType.java:126)
   at org.hibernate.type.ComponentType.hydrate(ComponentType.java:583)
   at org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:298)
   at org.hibernate.loader.hql.QueryLoader.getResultColumnOrRow(QueryLoader.java:356)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:629)
   at org.hibernate.loader.Loader.doQuery(Loader.java:724)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.doList(Loader.java:2232)
   ... 33 more


my console show this output:

Code:
24-jun-2010 14:06:03 org.hibernate.type.NullableType nullSafeGet
INFO: could not read column value from result set: col_0_1_; El nombre de columna col_0_1_ no es válido.
24-jun-2010 14:06:03 org.hibernate.util.JDBCExceptionReporter logExceptions
ADVERTENCIA: SQL Error: 0, SQLState: S1093
24-jun-2010 14:06:03 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: El nombre de columna col_0_1_ no es válido.


well, sorry about the long post but i wanna put most information possible i really appreciate some help or hints whats happened

kind regards

Grubhart


Top
 Profile  
 
 Post subject: Re: rare error invalid column name
PostPosted: Sun May 25, 2014 2:10 am 
Newbie

Joined: Wed May 21, 2014 2:46 am
Posts: 2
Hi even i am facing the same error. I am running sql query through the named query inside named query i am calling a stored procedure. But i am getting an error TICKET1_58_0 an invalid column. But in the generated query from my store proc this column is not there.

When i enable the hibernate logs in log4j properties i came to know that hibernate is generating a select query using my BO object at the server startup. The same query it is being used at run time. So can anyone please help me how to restrict the query generation at the server startup. Even disabled caching and enabled lazy loading for the mapping file. Still the issue persists.

Please help me someone who has already resolved this kind of error.

Thanks in Advance,
Raghunath.


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.