3838import  org .springframework .dao .InvalidDataAccessApiUsageException ;
3939import  org .springframework .jdbc .support .JdbcUtils ;
4040import  org .springframework .util .Assert ;
41+ import  org .springframework .util .ClassUtils ;
4142import  org .springframework .util .StringUtils ;
4243
4344/** 
@@ -257,22 +258,27 @@ public T mapRow(ResultSet rs, int rowNumber) throws SQLException {
257258
258259		for  (int  index  = 1 ; index  <= columnCount ; index ++) {
259260			String  column  = JdbcUtils .lookupColumnName (rsmd , index );
260- 			PropertyDescriptor  pd  = this .mappedFields .get (lowerCaseName (column .replaceAll (" " , "" )));
261+ 			String  field  = lowerCaseName (column .replaceAll (" " , "" ));
262+ 			PropertyDescriptor  pd  = this .mappedFields .get (field );
261263			if  (pd  != null ) {
262264				try  {
263265					Object  value  = getColumnValue (rs , index , pd );
264- 					if  (logger . isDebugEnabled () &&  rowNumber  == 0 ) {
265- 						logger .debug ("Mapping column '"  + column  + "' to property '"  +
266- 								pd . getName () +  "' of type "  + pd .getPropertyType ());
266+ 					if  (rowNumber  == 0  &&  logger . isDebugEnabled () ) {
267+ 						logger .debug ("Mapping column '"  + column  + "' to property '"  +  pd . getName () + 
268+ 								"' of type [ "  + ClassUtils . getQualifiedName ( pd .getPropertyType ()) +  "]" );
267269					}
268270					try  {
269271						bw .setPropertyValue (pd .getName (), value );
270272					}
271273					catch  (TypeMismatchException  ex ) {
272274						if  (value  == null  && this .primitivesDefaultedForNullValue ) {
273- 							logger .debug ("Intercepted TypeMismatchException for row "  + rowNumber  + " and column '"  +
274- 									column  + "' with null value when setting property '"  + pd .getName () +
275- 									"' of type "  + pd .getPropertyType () + " on object: "  + mappedObject );
275+ 							if  (logger .isDebugEnabled ()) {
276+ 								logger .debug ("Intercepted TypeMismatchException for row "  + rowNumber  +
277+ 										" and column '"  + column  + "' with null value when setting property '"  +
278+ 										pd .getName () + "' of type ["  +
279+ 										ClassUtils .getQualifiedName (pd .getPropertyType ()) +
280+ 										"] on object: "  + mappedObject , ex );
281+ 							}
276282						}
277283						else  {
278284							throw  ex ;
@@ -284,14 +290,21 @@ public T mapRow(ResultSet rs, int rowNumber) throws SQLException {
284290				}
285291				catch  (NotWritablePropertyException  ex ) {
286292					throw  new  DataRetrievalFailureException (
287- 							"Unable to map column "  + column  + " to property "  + pd .getName (), ex );
293+ 							"Unable to map column '"  + column  + "' to property '"  + pd .getName () + "'" , ex );
294+ 				}
295+ 			}
296+ 			else  {
297+ 				// No PropertyDescriptor found 
298+ 				if  (rowNumber  == 0  && logger .isDebugEnabled ()) {
299+ 					logger .debug ("No property found for column '"  + column  + "' mapped to field '"  + field  + "'" );
288300				}
289301			}
290302		}
291303
292304		if  (populatedProperties  != null  && !populatedProperties .equals (this .mappedProperties )) {
293305			throw  new  InvalidDataAccessApiUsageException ("Given ResultSet does not contain all fields "  +
294- 					"necessary to populate object of class ["  + this .mappedClass  + "]: "  + this .mappedProperties );
306+ 					"necessary to populate object of class ["  + this .mappedClass .getName () + "]: "  +
307+ 					this .mappedProperties );
295308		}
296309
297310		return  mappedObject ;
0 commit comments