I believe(have tried) we have incorrectly registered TO_CHAR in HSQL dialect:
registerFunction( "to_char", new StandardSQLFunction( "to_char" ) );
registerFunction( "to_char", new StandardSQLFunction("to_char",StandardBasicTypes.STRING) );
We're comparing a TO_CHAR construct that gets a Calendar as parameter to a String. The TO_CHAR converts the Calendar to a String, making it possible to compare it with a String. For me it looks like Hibernate
doesn't get that TO_CHAR makes that conversion and only sees that there's a Calendar (within the TO_CHAR) on the left hand side and a String parameter on the right hand side and decides (erroneously I think) that a comparison between the two is invalid.