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:
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:
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.