Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Native SQL throwing Invalid Column Name Exception

I am using Hibernate 3.2.5 for my application.

I have a Dept table and an Employees table.

Dept.java

private int deptId;
private String deptName;
private Map empMap = new HashMap();
//Getters and Setters

Employees.java

private int empId;
private String empName;
private int deptId;
private int age;
private String sex;
private Dept dept;

HBM Mapping file

<class name="com.jdbc.Dept" table="dept">
  <id name="deptId" type="integer" column="DEPT_ID">
      <generator class="assigned"></generator>
  </id>  
  <property name="deptName">
      <column name="DEPT_NAME"></column>
  </property>    
  <map name="empMap" inverse="false" cascade="all" lazy="true">
      <key column="DEPT_ID"></key>
      <map-key formula="EMP_ID" type="integer"></map-key>
      <one-to-many class="com.jdbc.Employees"/>
  </map>

Below is the code for Native SQL:

SQLQuery query = session.createSQLQuery("Select d.DEPT_ID, e.EMP_NAME from Dept d,Emp e where d.DEPT_ID = e.DEPT_ID")
                .addEntity(Dept.class);
List<Dept> departments = query.list();
        for(Dept depart :departments)
            System.out.println(depart.getDeptName());

I am getting the exception:

org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
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 com.jdbc.HibernateStartup.main(HibernateStartup.java:75)
Caused by: java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3295)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1913)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1514)
at org.hibernate.type.StringType.get(StringType.java:18)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
... 7 more

When I run the query directly in the db, then I am getting the correct output but in hibernate, it is giving an Invalid COlumn name. I have confirmed that the column names are correct only.

Kindly let me know how to fix this issue.

like image 927
user182944 Avatar asked Jun 26 '13 13:06

user182944


People also ask

Why is my column name invalid in SQL?

An invalid column name error in SQL means that the column name violates the conditions of the column name. If you reference an object that does not exist in the table or the name exists, but you did not reference it correctly, you will get this error.

What does invalid column index mean?

The most common cause of "java. sql. SQLException: Invalid column index" is a misconception that column index started with "0" like array or String index but that's not true instead column index starts with "1" so whenever you try to get or Set column data with column index "0" you will get "java. sql.

What is SQLException in Java?

The SQLException class provides information on a database access error. Each SQLException provides several kinds of information: a string describing the error. This is used as the Java Exception message, and is available via the getMesage() method. A "SQLstate" string which follows the XOPEN SQLstate conventions.


2 Answers

I had the same issue.

The reason is my column name in annotation is not correct.

@Column(name = "CUSTOMER_NAME", length = 200)

should be changed to

@Column(name = "CUST_NM", length = 200)
like image 25
Gordon Ma Avatar answered Oct 09 '22 01:10

Gordon Ma


you have this in your mapping:

<column name="DEPT_NAME"></column>

but there is no such column in your sql between Select and from:

session.createSQLQuery("Select d.DEPT_ID, e.EMP_NAME from Dept d,Emp e where d.DEPT_ID = e.DEPT_ID")

Hibernate has no possibilitys to bind the attribute. Try it with this:

session.createSQLQuery("Select d.DEPT_ID, d.DEPT_NAME, e.EMP_NAME from Dept d,Emp e where d.DEPT_ID = e.DEPT_ID")
like image 64
s_bei Avatar answered Oct 09 '22 01:10

s_bei