99import  org .hibernate .sql .results .spi .RowTransformer ;
1010
1111import  java .lang .reflect .Constructor ;
12- import  java .util .Arrays ;
1312import  java .util .List ;
1413
1514import  org .hibernate .query .sqm .SqmExpressible ;
@@ -33,6 +32,10 @@ public RowTransformerConstructorImpl(Class<T> type, TupleMetadata tupleMetadata)
3332		for  (int  i  = 0 ; i  < elements .size (); i ++) {
3433			sig [i ] = resolveElementJavaType ( elements .get ( i  ) );
3534		}
35+ 		if  ( sig .length  == 1  && sig [0 ] == null  ) {
36+ 			// Can not (properly) resolve constructor for single null element 
37+ 			throw  new  InstantiationException ( "Cannot instantiate query result type, argument types are unknown " , type  );
38+ 		}
3639		try  {
3740			constructor  = findMatchingConstructor ( type , sig  );
3841			constructor .setAccessible ( true  );
@@ -54,9 +57,7 @@ private static Class<?> resolveElementJavaType(TupleElement<?> element) {
5457		return  element .getJavaType ();
5558	}
5659
57- 	private  Constructor <T > findMatchingConstructor (
58- 			Class <T > type ,
59- 			Class <?>[] sig ) throws  NoSuchMethodException  {
60+ 	private  Constructor <T > findMatchingConstructor (Class <T > type , Class <?>[] sig ) throws  Exception  {
6061		try  {
6162			return  type .getDeclaredConstructor ( sig  );
6263		}
@@ -82,7 +83,7 @@ private Constructor<T> findMatchingConstructor(
8283					return  (Constructor <T >) constructor ;
8384				}
8485			}
85- 			throw  new   NoSuchMethodException () ;
86+ 			throw  e ;
8687		}
8788	}
8889
0 commit comments