I was tasked with writing a quick report from an existing sql in a hibernate 3 and spring mvc application that I have been working on. I decided that the quickest way to get this done would be to create a new POJO and use the existing sql as a named query to transform to the POJO in hibernate DAO.

This was as easy as writing:

{.js name="code"} sesssion.createSQLQuery(session.getNamedQuery("examplequery")).setResultTransformer(Transformers.aliasToBean(Example.class));

and performing the usual operations to set the relevant parts of the query.(More information on native sql in hibernate here)

When I came to run the application however, I got an exception:

Caused by: java.lang.IllegalArgumentException: argument type mismatch

This was for a column that i knew was a string!

After some googling around I found this blog by Michael Scepaniak detailing the problem.

It turns out hibernate isn’t so good at auto-detecting data types for native sql queries. My column was a CHAR not a VARCHAR as I had thought.

All I had to do was cast the char to a varchar in the query and all was good:

{.js name="code"} select cast(char_column as varchar(32) as char_column) from some_table

A slight difference from Michael’s blog is that I had to specify the number of characters (32) for the varchar in my DB2 database

I hope this helps anyone with the same problem.



Matt Reid

Lead Software Architect. Java/Node enthusiast, badminton lover, foodie.

drei01 Matthew_Reid