Original SQL query exception from SQL source code

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 Display 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 get an 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 request directly in db, I get the correct output, but in sleep mode it gives Invalid COlumn name . I confirmed that the column names are correct only.

Please let me know how to fix this problem.

+8
source share
3 answers

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") 

Hibernation does not have the ability to bind an attribute. Try it:

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

I had the same problem.

The reason my column name in the annotation is incorrect.

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

should be changed to

 @Column(name = "CUST_NM", length = 200) 
+1
source

Here are my 2 cents in addition to Stefan Beike.

In your case, the table is small. But if you are writing a similar query for a large table and do not want the whole columns to be retrieved into memory, it would be ideal to write a new DataTransferObject that will be used as your resultset-ref.

0
source

All Articles