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](http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html))

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](http://tech-blog.milestoneinc.com/hibernate-argument-type-mismatch-converting-a-char-to-a-string)
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

 

Matt Reid

Lead Software Architect. Java and js enthusiast, badminton lover, foodie.

drei01 Matthew_Reid


Published