[hibernate-issues] [Hibernate-JIRA] Created: (HHH-2490) ClassCastException causes a logging statement to throw another ClassCastException upon inconsistent instantiation of NullableType

Øyvind Roth (JIRA) noreply at atlassian.com
Wed Mar 14 06:27:09 EDT 2007


ClassCastException causes a logging statement to throw another ClassCastException upon inconsistent instantiation of NullableType
---------------------------------------------------------------------------------------------------------------------------------

         Key: HHH-2490
         URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2490
     Project: Hibernate3
        Type: Bug

  Components: core  
    Versions: 3.2.2    
 Environment: MS SQLServer
Windows 2000
Java 1.5.0_10
    Reporter: Øyvind Roth


(Have me excused that I don't know well the internalities of Hibernate, 
but I think that you get the point from some kind of "bird's perpective" anyhow).

My pojo is defined in my xml mapping with a column/field as follows:
...


		<property name="encrypted"
		          type="string"
		          column="encrypted"
	 	          insert="true"
	 	          update="true"
	 	          not-null="true"/>
...
The corresponding POJO class is defined with two access methods:

String getEncrypted();
and
boolean isEncrypted();
The field is a String with possible values "f" or "t".
Of convenience reasons I have added a parallell method 
operating on boolean. My database is designed with a CHAR(1) 
for booleans. (All this because the dam... RDBMS standard doesn't 
advice a consistent boolean data type, a really big blunder from 
time back in System R. OT ok, but I got it out.)

When Hibernate parses my instantiated pojo, a Boolean instance is 
generated. But it's "repository" is prepared with a StringType as a 
consequence of my XML configuration file. During the course, the 
method nullSafeSet of class NullableType is called with the value 
parameter Boolean. Eventually the 
"public abstract String toString(Object value) throws HibernateException;"
method is called for StringType, which is implemented with a simple typecast.
Exception received. Whether this behavior is ok or not is one discussion. 
But there's a second problem to it also: When the exception is received, 
NullableType tries to log the event:
...
catch ( RuntimeException re ) {
			log().info( "could not bind value '" + nullSafeToString( value ) + "' to parameter: " + index + "; " + re.getMessage() );
			throw re;
		}
...

And the same shit happens again. So the developer does not receive the actual exception, 
but the exception received from the logging statement. A strong golden rule of thumb: 
A logging statement should never ever throw. This is what I would call a bug in Hibernate.

Setting the log level to ERROR will of course not solve the problem, 
because the string paramater is evaluated before the log statement is ever reached.

A variant of this issue is described under: "HHH-2034"

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira





More information about the hibernate-issues mailing list