Recently I’ve got the following error during SQL named query execution:
SQL Error: 17006, SQLState: null Invalid column name
In order to track the problem down I enabled SQL logging and collected SQL query issued, then run it under SQL monitor and … it was working without error! I was surprised.
In order to debug what’s going on I enabled detailed logging in Hibernate. What was happened then?
[INFO] could not read column value from result set: entityKey215_0_; Invalid column name
This message showed me that the problem was not related to generated SQL query but to column names expected by Hibernate. Generated recordset didn’t has entityKey215_0_ column. I added:
entityKey AS {list.entityKey}
to named SQL query and error dissapeared.
This error is not-very-obvious kind of error because Oracle hides column / table names in error messages returned. Why? I don’t get this cryptic error messages idea. In order to track an error under Oracle I had to enable verbose logging (error message standalone din’t give anything useful). Much simpler database MySQL has better error reporting than “fat” Oracle.
Interesting error found on Oracle XE installed for one of projects. After a run of test case that uses JDBC to perform some operations on database all tests started to fail with this exception:
Caused by: java.sql.SQLException: ORA-00600: internal error code, arguments:\
[kdsgrp1], [], [], [], [], [], [], []
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1062)
Restart of Oracle database did not work. Seems table space was broken. I rebuit the database (DROP, then CREATE) and error dissapeared.
Interesting …
“ORA-01722: invalid number” is raised when a number was passed a query parameter, but another type (string) was expected.
The error message isn’t very helpful, is it?

The error
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of XYZ.setStatus().
Cause
Using primitive types (long) where NULL is possible or using wrong type (i.e. String if “char” is declared in HBM file).
Resolution
Change from primitive type (long) to wrappers (Long) or ensure correct type is defined in mapping files.

I was getting the following error:
ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
on line:
<property name="customer" column="CustomerId" />
the fix for above error was to use many-to-many tag instead of plain <property>:
<many-to-one name="customer" column="CustomerId" />
Note that class is not required here – it’s computed from return type of getCustomer() getter by reflection.
