I was trying to see what values were being bound to placeholders in the JDBC PreparedStatements generated by Hibernate DAO test classes I’ve created as they go about their persistent business.
Dead easy, right? Hibernate supports a configuration parameter ‘show_sql’. Set that to true and see what’s going on under the covers. Well… not so much. For a simple save operation, setting that results in the following logged output:
Hibernate: insert into ComponentGroup (name, id) values (?, ?)
Not exactly what I was hoping for. I don’t know what values have been bound to those two question-marks. After a bit of faffing and google-fu, I found this short-but-sweet post which showed a number of additional logging options to enable (assuming use of log4j). As it turns out, the important one in this case is:
log4j.logger.org.hibernate.type=TRACE
Which add a little more detail to the output:
Hibernate: insert into ComponentGroup (name, id) values (?, ?)
19:23:40,753 TRACE StringType:151 – binding ‘group1’ to parameter: 1
19:23:40,754 TRACE LongType:151 – binding ‘1’ to parameter: 2
It has to be the TRACE level, not DEBUG, and I can now see that the effective SQL, substituting for the placeholders is
insert into ComponentGroup(name, id) values (‘group1’, 1)
which helps me work out the detail of what’s going on.